2011-07-07 4 views
0

シナリオ -winformのメソッドは、どのようにApp_Codeのイベント/デリゲートをリッスンし、nullイベントを取得しませんか?

プログラムはwinFormを開きます。ユーザーが情報を入力し、「開始」ボタンをクリックします。アクションがApp_Code.Modelのコードに転送されます。コードが終了すると、winFormの背後にあるコードは更新された情報を表示する必要があります。 App_Code.ModelはwinFormについて知ってはいけません。この場合のwinFormには、ボタンbtnStartとテキストボックスtbInputがあります。

しかし、イベントが発生するとnullになるので、何か間違っています。これは、winFormsのuserControlsから生成されたイベントに関するものではありません。私はそれについてオンラインで多くの情報があることを認識しています。

App_Code.Model using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace EventsTest.App_Code.Model 
{ 
    public delegate void TableViewChangeHandler(object sender, HandChangedEventArgs e); 

    public class HandChangedEventArgs : EventArgs{ 
     public int HandNum { get; set; } 
     public int PlayerNum { get; set; } 
     public HandChangedEventArgs(int handNum, int playerNum){ 
      HandNum = handNum; 
      PlayerNum = playerNum; 
     } 
    } 
    public class Game{ 
     public event TableViewChangeHandler TableViewChanged; 
     public void PrepareGame(){ 
      int value = -1; 
      if (TableViewChanged != null) 
       TableViewChanged(this, new HandChangedEventArgs(value, 0)); 
      else 
       value = 2;//used to set toggle to catch debugger 
     } 
    } 
} 

コードビハインドフォーム using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;EventsTest.App_Code.Modelを使用しています。

namespace EventsTest 
{ 
    public partial class testForm : Form{ 
     public testForm(){ 
      InitializeComponent(); 
      Game myGame = new Game(); 
      myGame.TableViewChanged += this.HandleTableViewChange; 
     } 
     private void btnStart_Click(object sender, EventArgs e) { 
      Game myGame = new Game(); 
      myGame.PrepareGame(); 
     } 
     public void HandleTableViewChange(object sender, HandChangedEventArgs e){ 
      this.tbInput.Text = "Raised"; 
     } 
    } 
} 
+0

nullとは何ですか? PrepareGame()を呼び出すと、値は常に== 2になりますか? – Tigran

+0

TableViewChangedは常にnullです。 'else'は決して実行しません。 – cYourWay

答えて

0

私は理解できます。ゲームクラスの2つのインスタンスがあります。

  1. フォームのctorにあり、イベントを購読しています。

  2. イベントを購読していないbtnStart_Clickメソッドにあり、PrepareGame()を呼び出すため、イベント通知を受信しません。

ボタンクリックハンドラにイベントサブオプションコードを移動して完了しました。

関連する問題