Delphi - 如何在表单创建时自动突出显示第一个条目在DBLookupListBox中

时间:2010-05-19 09:38:57

标签: delphi delphi-2009

如何在没有最终用户突出显示DBLookupListBox的情况下自动突出显示第一个条目。

procedure TForm2.FormCreate(Sender: TObject);
begin
  Form2.ActiveControl := DBLookupListBox1;
end;

但这不起作用,我也尝试在表单create上创建DBLookupListBox1.setfocus,但这会产生错误,因为还没有创建DBLookupListBox。

由于

-Brad

1 个答案:

答案 0 :(得分:1)

我没有对此进行测试,但我认为您应该在表单的OnShow事件中使用SetFocus来激活控件。

procedure TForm2.FormShow(Sender: TObject);
begin
  DBLookupListBox1.SetFocus;
end;


设置默认值有点复杂,因为DBLookupListBox可识别数据库。 一种方法是在DataSet的OnNewRecord事件或AfterInsert事件中设置默认值:

procedure TMyDataModule.cdsMyClientDataSetNewRecord(DataSet: TDataSet);
begin
  cdsMyClientDataSetMYPERSISTENTFIELDNAME.Value := 0;
end;


如果您仍希望从表单中执行此操作:

procedure TForm2.FormShow(Sender: TObject);
const
  DEFAULT = 0;
var
  S: String;
begin
  S := DBLookupListBox1.DataField;

  if DBLookupListBox1.DataSource.DataSet.FieldByName(S).IsNull then
  begin 
    DBLookupListBox1.DataSource.DataSet.Edit;
    DBLookupListBox1.DataSource.DataSet.FieldByName(S).Value := DEFAULT;
    DBLookupListBox1.DataSource.DataSet.Post;
  end;
end;


恕我直言:
设置默认值应视为业务逻辑,因此属于DataModule。

设置适当的焦点是GUI逻辑,应该在表单中完成。