当前位置:Gxlcms > 数据库问题 > 给DBGrid动态赋值后,如何用程序指定某行某列为当前焦点?(100分)

给DBGrid动态赋值后,如何用程序指定某行某列为当前焦点?(100分)

时间:2021-07-01 10:21:17 帮助过:9人阅读

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB; type TForm1 = class(TForm) ADOTable1: TADOTable; DataSource1: TDataSource; DBGrid1: TDBGrid; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ADOTable1.RecNo := 3; ADOTable1.FieldByName(用户名称).FocusControl; end; end.

如果希望是第2列获得焦点(字段数组下标从0开始):
ADOTable1.RecNo := 3;
ADOTable1.Fields[1].FocusControl;

 

有一个问题,我的修改窗口是Form_ShangPinZiLiaoModi.ShowModal; 弹出的,所以
Form_ShangPinZiLiaoModi.Close; Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.RecNo := CurrentNumber; Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.Fields[3].FocusControl;
出现错误,错误内容是“cannot focus a disabled or invisible window”,
我应该怎么改呢?
谢谢!

 

“cannot focus a disabled or invisible window”错误的原因是DBGrid1所在的窗口还没有显示出来,操作某控件的Focus时其所在的窗口必须是已经显示出来的。所以你需要把
Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.RecNo := CurrentNumber; Form_KuCunGuanLi.DBGrid1.DataSource.DataSet.Fields[3].FocusControl;
放在窗口显示出来以后的操作中。
另外FocusControl方法是字段对象的方法,所有的数据集控件都应该是可以的。

 

  1. <span style="color: #000000;">窗口2打开时焦点定位在DBGrid1的3行2列:
  2. </span><span style="color: #0000ff;">unit</span><span style="color: #000000;"> Unit1;
  3. </span><span style="color: #0000ff;">interface</span>
  4. <span style="color: #0000ff;">uses</span><span style="color: #000000;">
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
  7. </span><span style="color: #0000ff;">type</span><span style="color: #000000;">
  8. TForm1 </span>= <span style="color: #0000ff;">class</span><span style="color: #000000;">(TForm)
  9. Button1: TButton;
  10. </span><span style="color: #0000ff;">procedure</span><span style="color: #000000;"> Button1Click(Sender: TObject);
  11. </span><span style="color: #0000ff;">private</span>
  12. <span style="color: #008000;">{</span><span style="color: #008000;"> Private declarations </span><span style="color: #008000;">}</span>
  13. <span style="color: #0000ff;">public</span>
  14. <span style="color: #008000;">{</span><span style="color: #008000;"> Public declarations </span><span style="color: #008000;">}</span>
  15. <span style="color: #0000ff;">end</span><span style="color: #000000;">;
  16. </span><span style="color: #0000ff;">var</span><span style="color: #000000;">
  17. Form1: TForm1;
  18. </span><span style="color: #0000ff;">implementation</span>
  19. <span style="color: #008000;">{</span><span style="color: #008000;">$R *.dfm</span><span style="color: #008000;">}</span>
  20. <span style="color: #0000ff;">uses</span><span style="color: #000000;">
  21. unit2;
  22. </span><span style="color: #0000ff;">procedure</span><span style="color: #000000;"> TForm1.Button1Click(Sender: TObject);
  23. </span><span style="color: #0000ff;">begin</span><span style="color: #000000;">
  24. Form2.ShowModal;
  25. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  26. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">.
  27. </span>************************************************
  28. <span style="color: #0000ff;">unit</span><span style="color: #000000;"> Unit2;
  29. </span><span style="color: #0000ff;">interface</span>
  30. <span style="color: #0000ff;">uses</span><span style="color: #000000;">
  31. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  32. Dialogs, DB, ADODB, Grids, DBGrids;
  33. </span><span style="color: #0000ff;">type</span><span style="color: #000000;">
  34. TForm2 </span>= <span style="color: #0000ff;">class</span><span style="color: #000000;">(TForm)
  35. DataSource1: TDataSource;
  36. DBGrid1: TDBGrid;
  37. ADOTable1: TADOTable;
  38. </span><span style="color: #0000ff;">procedure</span><span style="color: #000000;"> FormShow(Sender: TObject);
  39. </span><span style="color: #0000ff;">private</span>
  40. <span style="color: #008000;">{</span><span style="color: #008000;"> Private declarations </span><span style="color: #008000;">}</span>
  41. <span style="color: #0000ff;">public</span>
  42. <span style="color: #008000;">{</span><span style="color: #008000;"> Public declarations </span><span style="color: #008000;">}</span>
  43. <span style="color: #0000ff;">end</span><span style="color: #000000;">;
  44. </span><span style="color: #0000ff;">var</span><span style="color: #000000;">
  45. Form2: TForm2;
  46. </span><span style="color: #0000ff;">implementation</span>
  47. <span style="color: #008000;">{</span><span style="color: #008000;">$R *.dfm</span><span style="color: #008000;">}</span>
  48. <span style="color: #0000ff;">procedure</span><span style="color: #000000;"> TForm2.FormShow(Sender: TObject);
  49. </span><span style="color: #0000ff;">begin</span><span style="color: #000000;">
  50. ADOTable1.RecNo :</span>= <span style="color: #800080;">3</span><span style="color: #000000;">;
  51. ADOTable1.Fields[</span><span style="color: #800080;">1</span><span style="color: #000000;">].FocusControl;
  52. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  53. </span><span style="color: #0000ff;">end</span>.
  1. <span style="color: #000000;">还是改不好。我这个是MDI程序,MainForm中 Form1.ShowModal,Form1中Form2.ShowModal,Form1中有DBGrid,Form2是修改窗口,Form2修改之后
  2. Form1.DBGrid1.Fields[</span><span style="color: #800080;">3</span><span style="color: #000000;">].FocusControl;出错。不用Form2直接在Form1中也不好用。
  3. 真是不好改。</span>
  1. 你在Form2上做了什么操作后Form1.DBGrid1.Fields[<span style="color: #800080;">3</span>].FocusControl出的错?把代码贴上来看看比较好找出问题。
  1. <span style="color: #000000;">MainForm中:
  2. </span><span style="color: #0000ff;">procedure</span><span style="color: #000000;"> TMainForm.Button1Click(Sender: TObject);
  3. </span><span style="color: #0000ff;">begin</span><span style="color: #000000;">
  4. Form1.ShowModal;
  5. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  6. Form1中:
  7. </span><span style="color: #0000ff;">procedure</span><span style="color: #000000;"> TForm1.FormShow(Sender: TObject);
  8. </span><span style="color: #0000ff;">begin</span>
  9. <span style="color: #0000ff;">try</span>
  10. <span style="color: #0000ff;">if</span> DataModule1.ADOConnection1.Connected <span style="color: #0000ff;">then</span>
  11. <span style="color: #0000ff;">begin</span><span style="color: #000000;">
  12. sql2 :</span>= <span style="color: #800000;">‘</span><span style="color: #800000;">select XuHao as 序号,zhengshuhao as 证书号,kuanhao as 款号,</span><span style="color: #800000;">‘</span> +
  13. <span style="color: #800000;">‘</span><span style="color: #800000;">xiaojia as 销价,rukuliang as 入库量,zhiquanhao as 指圈号,</span><span style="color: #800000;">‘</span> +
  14. <span style="color: #800000;">‘</span><span style="color: #800000;">shouhuoriqi as 收货日期,xiaoshouriqi as 销售日期,fanghuodanwei</span><span style="color: #800000;">‘</span> +
  15. <span style="color: #800000;">‘</span><span style="color: #800000;"> as 放货单位,nid as ID from KuCunInfo order by xuhao</span><span style="color: #800000;">‘</span><span style="color: #000000;">;
  16. DataModule1.ADOQuery1.Close;
  17. DataModule1.ADOQuery1.SQL.Text :</span>=<span style="color: #000000;"> sql2;
  18. DataModule1.ADOQuery1.ExecSQL ;
  19. DataModule1.ADOQuery1.Active :</span>=<span style="color: #000000;"> true;
  20. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  21. </span><span style="color: #0000ff;">finally</span>
  22. <span style="color: #0000ff;">end</span><span style="color: #000000;">;
  23. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  24. </span><span style="color: #0000ff;">procedure</span><span style="color: #000000;"> TForm1.Button1Click(Sender: TObject);
  25. </span><span style="color: #0000ff;">begin</span>
  26. <span style="color: #008000;">{</span><span style="color: #008000;">修改KuCunInfo中的数据</span><span style="color: #008000;">}</span>
  27. <span style="color: #0000ff;">try</span><span style="color: #000000;">
  28. Form1.DBGrid1.Fields[</span><span style="color: #800080;">3</span><span style="color: #000000;">].FocusControl;
  29. </span><span style="color: #0000ff;">finally</span>
  30. <span style="color: #0000ff;">end</span><span style="color: #000000;">;
  31. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  32. 这样就出错了,不用在Form2中修改。</span>
  1. <span style="color: #000000;">哈哈,我弄出来了。在大富翁上搜索的。
  2. Form1.DBGrid1.SelectedIndex :</span>= <span style="color: #800080;">4</span><span style="color: #000000;">;
  3. Form1.DBGrid1.SetFocus;
  4. 这样就行了。
  5. 谢谢你!</span>
  1. <span style="color: #0000ff;">procedure</span><span style="color: #000000;"> TForm1.Button1Click(Sender: TObject);
  2. </span><span style="color: #0000ff;">begin</span>
  3. <span style="color: #008000;">{</span><span style="color: #008000;">修改KuCunInfo中的数据</span><span style="color: #008000;">}</span>
  4. <span style="color: #008000;">//</span><span style="color: #008000;">修改完库存信息后,由于Form1中的数据还是旧的,所以需要在这里更新一下Form1中</span><span style="color: #008000;">
  5. //</span><span style="color: #008000;">的数据,即:重新打开一次DBGrid1对应的数据集控件(DataModule1.ADOQuery1),然后 </span><span style="color: #008000;">
  6. //</span><span style="color: #008000;">再执行FocusControl</span>
  7. <span style="color: #0000ff;">try</span><span style="color: #000000;">
  8. Form1.DBGrid1.Fields[</span><span style="color: #800080;">3</span><span style="color: #000000;">].FocusControl;
  9. </span><span style="color: #0000ff;">finally</span>
  10. <span style="color: #0000ff;">end</span><span style="color: #000000;">;
  11. </span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
  12. 另外以下代码:
  13. DataModule1.ADOQuery1.Close;
  14. DataModule1.ADOQuery1.SQL.Text :</span>=<span style="color: #000000;"> sql2;
  15. DataModule1.ADOQuery1.ExecSQL ;
  16. DataModule1.ADOQuery1.Active :</span>=<span style="color: #000000;"> true;
  17. 建议这样写:
  18. DataModule1.ADOQuery1.Close;
  19. DataModule1.ADOQuery1.SQl.Clear;
  20. DataModule1.ADOQuery1.SQL.Add(sql2);
  21. DataModule1.ADOQuery1.Open;
  22. ADOQuery1控件,如果其SQL为select语句使用Open,如果是Insert、update、</span><span style="color: #0000ff;">delete</span>等不需要返回值的SQL用ExecSQL 。

 

给DBGrid动态赋值后,如何用程序指定某行某列为当前焦点?(100分)

标签:send   ado   source   cli   数据集   inf   order   nal   dialog   

人气教程排行