2012-05-07 10 views
1

フォーム上にUserControlを持っています。 そのUserControlでMouseMoveを実行したときに、フォームで何かしたいと思います。マウスイベントをあるクラスから聞いて、別のクラスでそれを聞くにはどうすればいいですか?

フォームでこのイベントを「聴く」ことができますか?あなたが(それは質問から明らかではありません)あなたは マウス - をrecievesクラスの新しいイベントを定義する必要がありますについてWindows Formsを話している場合は、私は、Visual C#を使用しています

、.NETフレームワーク3.5は、

+1

あなたはもう少し情報を与えなければならないでしょう。 winformsやasp.netにいますか?これはボタンクリックイベントなのでしょうか? – rie819

+0

例外処理の用語である "スローされた"と "捕まえられた"というフレーズイベントは行わないでください。混乱の原因となります。 – asawyer

答えて

4

私はあなたがそのような使用コントロールなどを指していると思います。

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

次に、2番目のクラスの公開イベントを購読する必要があります。あなたがsintax表示されるように

これはサンプルです:

A)クラス:JotaBeからの回答に少しを展開するには

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; 
     } 

    } 
1

をリサイズイベント。受信後、新しいカスタムイベントが発生します。もう1つのクラスは、その(カスタムイベント)受信通知に登録されています。

萌え情報について

(それは数行にpresenteedできるものではありません) がここalookを持つことができます。

How to propagate an Event up to the MainForm?

をあなたがWPFについて話している場合は、イベントの異なる概念があります。イベントルーティング。あなたのクラスが実際にマウスイベントを受け取るコンポーネントのUIツリーにあるUI要素である場合、そのクラスもクラスに伝播されます。だから、より多くのコーディングの必要はありません。

1

を、私はあなたが持って見ることができる2つのシナリオがあります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は、すでに必要なすべてのコード例を追加しました

関連する問題