1

Windowsフォームフォームに多くのイベントがあります。フィードバックラベルがあり、feedbaxk.Text="";と書く必要があります。各イベントの開始時に。

ASP.NETでは、ポストバックごとに発生するイベントで1回だけ書き込むために使用していましたがpage_load、FormLoadは1回だけ発生します。

質問のタイトルで検索しようとしましたが、次の2つの最も近い回答が見つかりました。

関連する資料がいくつかありますが、これらやその他多くの資料から満足のいく回答を得ることができませんでした。

イベントが発生することをWindowsフォームでどのように検出できますか?

更新:別の方法でグーグルで検索すると、別のリンクにリンクされている近いリンクが見つかりました。.NETでWindowsフォームコントロールのすべてのイベントハンドラーを検索し、1つのコントロールからイベントハンドラーを「盗んで」、別?。これらを見た後、私はそれが可能だと思います

  1. Form_Loadの最後にwin-formsayですべてのイベントのリストを取得できました(その後はイベントを追加しません)。次に、すべてのイベントに少し一般的な機能(ラベルテキストの変更など)を追加します。
  2. 親からすべてのイベントを継承し、そのイベントに必要な機能を追加してから、各イベントに特定の機能を追加(オーバーライド)できる場合があります。
4

3 に答える 3

2

ウィンドウにはサイズ変更、クリック、移動などのイベントを含めることができるため、処理する特定のイベントによって異なります。ASP.NET を参照して提起したポイントを見ると、これを処理したいようですいくつかのボタンクリック。

WndProc をオーバーライドして、WM_COMMANDメッセージの処理を試みることができます。特定のボタンのクリックでこれを処理したい場合は、ボタンごとにこれを処理すると言えます。

于 2012-09-12T14:50:38.940 に答える
0

すべてのボタン クリック イベントで何らかのコードを実行する場合は、次のようなヘルパー メソッドを作成して、フォーム上のすべてのボタンのクリック イベント ハンドラーにメソッドを関連付けることができます。

public static class UIHelper
{
    public static void RegesterButtonClicks(Form form, EventHandler method)
    {
        foreach (Control control in form.Controls)
        {
            if (control is Button)
            {
                control.Click += method;
            }
        }
    }
}

次に、すべてのボタン クリックで実行するメソッドを作成します。このようなもの:

private void OnButtonClick(object sender, EventArgs e)
{
    //Code for all clicks here
}

次に、InitializeComponent(); の下に次のコード行を追加します。コンストラクターの行

UIHelper.RegesterButtonClicks(this, OnButtonClick);

必要に応じて、ヘルパー メソッドを拡張して、メソッドを他のイベントや他の種類のコントロールにアタッチすることもできます。

于 2012-09-15T03:52:44.693 に答える
0

AOPを使用してこれを行うことができます。Unity (Unity Application Block) フレームワークを使用して、Windows フォーム フォーム内のすべてのイベント メソッドを装飾します。イベント メソッドを呼び出す前にカスタム メソッドを呼び出します。

リフレクションとプロキシ パターンを使用すると、コードを簡単に実行および非表示にできます。関連する記事はAspect-Oriented Programming, Interception and Unity 2.0です。

于 2012-08-29T09:07:38.930 に答える