Delphi - Как автоматически выделить первую запись в DBLookupListBox при создании формы - PullRequest
0 голосов
/ 19 мая 2010

Как автоматически выделить первую запись в DBLookupListBox без ее выделения конечным пользователем.

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

Но это не работает, я также пробовал DBLookupListBox1.setfocus при создании формы, но это выдает ошибку, поскольку DBLookupListBox еще не создан.

Спасибо

-Brad

1 Ответ

1 голос
/ 19 мая 2010

Я не проверял это, но я предполагаю, что вы должны использовать SetFocus в событии OnShow формы, чтобы активировать элемент управления.

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;


ИМХО:
Установка значений по умолчанию должна рассматриваться как бизнес-логика и, следовательно, относится к модулю данных.

Установка подходящего фокуса является GUI-логикой и должна быть выполнена в виде.

...