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

发布于 2024-09-01 18:06:03 字数 290 浏览 5 评论 0原文

如何自动突出显示 DBLookupListBox 中的第一个条目,而无需最终用户突出显示它。

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

但这不起作用,我还在表单创建上尝试过 DBLookupListBox1.setfocus ,但这给出了错误,因为 DBLookupListBox 尚未创建。

谢谢

-布拉德

How do I auto highlight the 1st entry in a DBLookupListBox without the end user highlighting it.

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

But this doesn't work, I've also tried DBLookupListBox1.setfocus on form create, but this gives an error, because the DBLookupListBox is not created yet.

Thanks

-Brad

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

|煩躁 2024-09-08 18:06:03

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

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

设置默认值有点复杂,因为 DBLookupListBox 是 DB 感知的。
一种方法是在 DataSets 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 逻辑,应该在表单中完成。

I haven't tested this, but I would assume that you should use SetFocus in the form's OnShow event to activate the control.

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



Setting a default value is a bit more complicated because the DBLookupListBox is DB-aware.
One approach is to set the default values in the DataSets OnNewRecord event or AfterInsert event:

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



If you still would like to do this from the Form:

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;



IMHO:

Setting default values should be considered as business logic and therefore belongs in the DataModule.

Setting the appropriate focus is GUI-logic and should be done in the form.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文