2

コンボボックスに問題があります。OnClick選択された項目に基づいてデータを更新するイベント ハンドラーがあります。問題は、次のシナリオが発生した場合です。

  1. コンボボックスをドロップダウンして、さまざまなオプションを一覧表示します
  2. キーボードで入力して、一致する項目を見つけます
  3. コンボボックスはこの選択を変更し、OnClickイベントを呼び出します
  4. この選択/イベントにより画面が更新されます
  5. コンボ ボックスの外側のどこかをクリックして、フォーカスを外します。
  6. OnClickコンボボックスは、すでに呼び出されていても、前の選択に戻ります
  7. コンボ ボックスが前の選択に戻っても、OnClick再度呼び出されることはありません
  8. この後、コンボボックスは私のデータが実際に表すものとは異なる値を示します

そのため、コンボ ボックスを開いて、ドロップダウン リスト内の項目を見つけるためにキーボードで数文字を入力するとOnClick、画面が更新されます。しかし、コンボ ボックスの外側のどこかをクリックすると (つまりフォーカスが離れます)、コンボ ボックスは、入力した値ではなく、以前に選択されていた値に戻ります。同時に、OnClickイベントが発生しないため、画面にロードした値と比較してコンボ ボックスに正しくない値が表示されます。

キーボードで項目を入力するこのシナリオで、コンボ ボックスを選択した項目にとどめるにはどうすればよいですか?

4

2 に答える 2

1

私のコードでは、OnCloseUpイベントを使用してこれを処理します。実際、私はドロップダウン リストにサブクラス化されたコンボを使用しており、メソッドChangeCloseUpメソッドの両方をオーバーライドしています。

procedure TMyDropDownList.Change;
begin
  RespondToChange;
  inherited;
end;

procedure TMyDropDownList.CloseUp;
begin
  RespondToChange;
  inherited;
end;

メソッドは新しい値RespondToChangeに反応します。ItemIndexコンボがドロップダウンされている間にすべての変更に対応するのがコストがかかる場合は、メソッドRespondToChangeからの呼び出しを省略することを検討してください。Change

于 2013-11-14T07:11:23.893 に答える