1

フォームに UserControl があります。その UserControl で MouseMove すると、フォームで何かをしたいと思います。

このイベントをフォームに「リッスン」させるにはどうすればよいですか?

Visual C#、.Net Framework 3.5、winforms を使用しています

4

3 に答える 3

4

使用制御などについて言及していると思います。

を追加してpublic event、内部クラス イベントを検出したときにクラス内でトリガーすることができます。

次に、2 番目のクラスで発行されたイベントをサブスクライブする必要があります。

これは、シンタックスを確認するためのサンプルです。

    public class WithEvent
    {
        // this is the new published event
        public EventHandler<EventArgs> NewMouseEvent;

        // This handles the original mouse event of the inner class
        public void OriginalEventhandler(object sender, EventArgs e)
        {
            // this raises the published event (if susbcribedby any handler)
            if (NewMouseEvent != null)
            {
                NewMouseEvent(this, e);
            }
        }
    }

    public class Subscriber
    {
        public void Handler(object sender, EventArgs e)
        {
            // this is the second class handler
        }

        public void Subscribe()
        {
            WithEvent we = new WithEvent();
            // This is how you subscribe the handler of the second class
            we.NewMouseEvent += Handler;
        }

    }
于 2012-05-07T17:33:24.723 に答える
1

あなたが話している場合Windows Forms(質問からは明らかではありません)、マウスイベントを受け取るクラスで新しいイベントを定義する必要があります。受信後、新しいカスタムイベントが発生します。別のクラスは、その(カスタムイベント)受信通知にサブスクライブされます。

萌え情報(数行で表示できるものではありません)については、こちらをご覧ください。

イベントをMainFormまで伝播する方法は?

あなたが話しているならWPF、イベントの異なる概念があります:イベントルーティング。クラスが、実際にマウスイベントを受信するコンポーネントのUIツリーに存在するUI要素である場合、それはクラスにも伝播されます。したがって、これ以上のコーディングは必要ありません。

于 2012-05-07T17:32:28.200 に答える
1

JotaBe からの回答を少し詳しく説明すると、次の 2 つのシナリオが考えられます。

a) クラス A がクラス B のメソッドを呼び出し、例外が発生します。この場合、何もする必要はありません。例外は、catch ステートメントが見つかるまでスタックを調べます。したがって、実際に行う必要があるのは、例外をキャッチしないことです。または、例外をキャッチする必要がある場合は (ロギング目的などで)、再スローします。

b)例外の結果として、無関係なクラスでコードをトリガーする必要がある場合は、イベントを使用するのが最善の方法です。クラスで次のように宣言します。

public class ClassA
{
    public static event EventHandler<Exception> OnException;

    public void Notify(Exception ex)
    {
        if (OnException != null)
        {
            OnException(this, ex);
        }
    }
}

そして、通知を受けるために必要なのは、

ClassA.OnException += (sender, exeption) => 
{
    ... some GetHashCode ..
};

...私が入力していたように、JotaBeは必要なすべてのサンプルコードをすでに追加していると思います

于 2012-05-07T17:44:03.203 に答える