0

実行時に入力されるフォームに 2 つのリストボックスがあります。

「選択済み」リストボックスの色(および他の多くのもの)を変更するOnClickイベントがあり、ユーザーにとってアクティブなリストボックスがわかります。

ユーザーがリストボックス内のアイテムをクリックすると、すべて正常に機能しますが、リストボックス内の空白をクリックすると、OnClick は発生しません。

OnMouseUp を使用して OnClick イベントを指すことを考えましたが、そのイベント内の他のものはその時点では必要ありません。

ListBox の空白内でクリックを検出するにはどうすればよいですか?

4

2 に答える 2

2

あなたが実際に探しているのは、焦点の変化を検出することのようです。コントロールがフォーカスを取得したときと、フォーカスを失ったときを検出したいとします。そのためには、OnEnterandOnExitイベントを使用する必要があります。OnClickイベントは、単にタスクの間違ったイベントです。

ドキュメントからOnEnter

OnEnter イベント ハンドラーを使用して、コントロールがアクティブになったときに特別な処理を発生させます。

OnEnter イベントは、フォーム間、または別のアプリケーションとコントロールを含むアプリケーションの間で切り替えた場合には発生しません。

TPanel コントロールや TGroupBox コントロールなどの個別のコンテナ コントロール内のコントロールを切り替えると、含まれているコントロールの OnEnter イベントの前にコンテナに対して OnEnter イベントが発生します。

同様に、コンテナーの OnExit イベントは、フォーカスがコンテナー外の別のコントロールに移動したときに、コンテナー内のコントロールの OnExit イベントの後に発生します。

たとえば、[OK] ボタンと 3 つのラジオ ボタンを含むグループ ボックスを含むフォームがあり、現在 [OK] ボタンにフォーカスがあるとします。ユーザーがラジオ ボタンの 1 つをクリックすると、ボタンの OnExit イベントが発生し、続いてグループ ボックスの OnEnter イベントが発生し、最後にクリックされたラジオ ボタンの OnEnter イベントが発生します。次にユーザーが [OK] ボタンをクリックすると、ラジオ ボタンの OnExit イベントが発生し、続いてグループ ボックスの OnExit イベントが発生し、次にボタンの OnEnter イベントが発生します。

于 2013-06-30T18:57:49.560 に答える
-1

うーん... Listbox.ItemIndex = -1 は、空の領域をクリックすることを意味します。マウスイベントを使用すると、うまくいくはずです。

別のオプション:クリックイベントを使用する代わりに、フォーカスのあるコンポーネントを確認してみてください。

編集 : Delphi5 が利用できないため、この「バグ」は XE で修正されていると言えます。タイマーを設定し、このプロパティが利用可能であることが望ましい場合は、どのリストボックスにフォーカスがあるか (Listbox.Focused) を確認します。

于 2013-06-30T16:53:27.083 に答える