私はフォーム上で発生するイベントを聴くように設計された "ControlMonitor"クラスを持っています。どのように動作するかは、監視したいフォームをこのクラスのインスタンスに渡し、フォームのコントロールのすべてを反復処理し、関連するイベントを登録することです。たとえば、コントロールがTextBoxの場合、TextChangedに登録します。コントロールがComboBoxの場合、SelectedIndexChangedとTextChangedの両方に登録されます。このようにして、 "ControlMonitor"インスタンスは、ユーザーがフォームに入力したすべての重要なアクションについて、フォームコード自体への侵入を最小限に抑えながら報告することができます。私のアプリケーションでMessageBoxとDialogの結果を聞く
フォームのコントロールのレポートには効果的ですが、フォームによって起動された共通のダイアログボックス/メッセージボックスと、ユーザーがどのように応答したかも知る必要があります。ここでのより大きな目標は自動化です。私たちは、自動化ツールで再生されるものにスクリプトで記述できる一連の繰り返し可能なステップを作成したいと考えています。そのために、ユーザーが「ファイル/開く」をクリックしたことを知るだけでは不十分です。起動されたOpenFileDialogのウィンドウタイトル、ユーザーが選択したパス、DialogResultも知っておく必要があります。同じことがMessageBoxの呼び出しにも当てはまります。ウィンドウのタイトルとDialogResultを知る必要があります。
一般的なダイアログボックスではイベントのサポートが最小限に抑えられているようです(FolderBrowserDialogはイベントがまったく発生しません)。また、MessageBox呼び出しの結果をリスンするときにどこから開始するのかもわかりません。もちろん、一般的なダイアログとMessageBoxの呼び出しをカプセル化し、その結果を "ControlMonitor"インスタンスに渡すラッパークラスを書くこともできますが、プログラムの残りの部分はこのラッパークラスを常に使用する必要があり、プライマリ私の "ControlMonitor"クラスの目的は、それをプロジェクトに組み込み、元のコードへの侵入を最小限に抑えてフォームの1つを聴くことができることです。
"ControlMonitor"クラス内でできることはありますか? DialogResultsとすべてのダイアログボックス/メッセージボックスのウィンドウタイトルが必要です。また、OpenFileDialogなどのより複雑なダイアログでは、ユーザーが選択したパスなども知る必要があります。 "ControlMonitor"クラスは、プログラムのコンパイル済み部分です。 toに渡されるので、渡されたFormオブジェクトに直接アクセスできます。私はここに近づいている。私はアプリケーションの95%を監視することができます。なぜなら、そのほとんどはフォーム上のコントロールだけなので...ダイアログを監視する方法が必要です。
hmmm ...この機能が必要なのは何ですか?フォームにユーザーのアクションのプロファイルを作成するのが好きなようです。 – MacX
私が言ったように、主に自動化の目的のために。私たちは、自動化ツールで再生されるものにスクリプトで記述できる一連の繰り返し可能なステップを完成させたいと考えています。監査および診断の目的にも望ましい。 –