2017-09-12 3 views
0

私はWinformのコンボボックスを持っていますが、ユーザーがオプションをいつ選択するのかを知る必要があります。問題は、各イベントタイプには欠点があることです。C#Winform - 1つのユーザーアクションで2つのイベントが発生したかどうかを検出します。

クローズドドロップダウンリストでコンボボックスが選択され、キーボードの矢印で上下に移動することで選択が行われた場合、textChangedは発生しません。

ドロップダウンリストが開いているときにSelectionChangeCommittedHandlerが起動しない場合、ユーザーはキーボードの矢印で上下に移動し、コンボボックスのタイトルまたは外側のいずれかをマウスでクリックします。

SlectedIndexChangedHandlerが頻繁に実行されるため、Web接続が弱い場合にプログラムが遅くなります。

だから私は、そのソリューションを実行するために考えた:両方SelectionChangeCommittedHandlerとtextChangedイベントに登録

との両方が発射されていることを例に、そのうちの一つを無視します。問題は、その状況(1つのユーザーアクションから2つのイベント)を検出する方法がわからないことです。

私はそれを検出する方法を知ってうれしく思います。もしあれば、もっと良い解決策を聞くことができます。

+2

"SlectedIndexChangedHandlerが頻繁に実行されるため、Web接続が弱い場合にプログラムが遅くなります。" - ネットワークI/OがUIをブロックする場合、あなたは「間違っている」と思います...実際に達成しようとしているのは何ですか?あなたの目標は何ですか? – Fildor

+0

@Fildor 1つのコンボボックスで値を選択すると、選択した値をパラメータとしてWebサービスを呼び出すことによって、次のコンボボックスにデータを入力します。それを行う良い方法はありますか? – Yehezkel

+0

いくつかの点によって異なります:1.コンボにはいくつのアイテムが含まれていますか? 2.選択がコミットされた後にフェッチするだけで十分ですか? 3.従属コンボにはいくつのアイテムがありますか? ...私が目指しているのは、例えば、第2コンボボックスのすべての可能なアイテムリストを「プリフェッチ」することは意味をなさないでしょうか?そして、あなたは本当にすべての変更にアイテムを取得する必要がありますか? (= 1. *コンボをスクロールするときに、2.コンボで項目が変化するのを見なければならないか?) – Fildor

答えて

1

少し汚れていますが、私はあなたに解決策を提供しようとしています。両方のイベントを待ち受けて、そのうちの1つが起動するたびにタイムスタンプをマークします。イベントが発生すると、現在の時間と最後の操作時間を確認し、最後に操作してから一定の時間が経過した場合にのみ、プログラムロジックを続行します。

約100ミリ秒で十分ですが、自分で試してみてください。

関連する問題