我遇到了组合框的问题。我有OnClick
的事件处理程序,它根据选择的项目刷新数据。问题出在这种情况发生时:
OnClick
事件OnClick
OnClick
因此,当您打开一个组合框,并在键盘上键入几个字母以在下拉列表中找到该项目时,将触发OnClick
刷新我的屏幕。但是,当您单击组合框外部的某个位置(从而将焦点从其中移开)时,组合框将更改回先前选择的任何值,而不是我键入的值。同时,OnClick
事件未被触发,因此组合框显示与我在屏幕上加载的值不正确的值。
如何在键盘上输入项目的场景中使组合框保留在所选项目上?
答案 0 :(得分:1)
在我的代码中,我使用OnCloseUp
事件处理此问题。好吧,实际上我在下拉列表中使用了一个子类组合,它们都覆盖了Change
和CloseUp
方法:
procedure TMyDropDownList.Change;
begin
RespondToChange;
inherited;
end;
procedure TMyDropDownList.CloseUp;
begin
RespondToChange;
inherited;
end;
RespondToChange
方法对新的ItemIndex
值做出反应。如果在组合下拉时对每个更改做出反应都很昂贵,那么您可以考虑从RespondToChange
方法中省略对Change
的调用。
答案 1 :(得分:0)
您可以使用OnExit使用键盘jive和ComboBox上的Index进行输入;其中VarS被分配了OnChange并且是你想要保留的答案:
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
{ Windows keyboard select bug, force use of selected }
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(VarS);
end;
我认为这是ComboBox设计中的一个错误。