シナリオ -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";
}
}
}
nullとは何ですか? PrepareGame()を呼び出すと、値は常に== 2になりますか? – Tigran
TableViewChangedは常にnullです。 'else'は決して実行しません。 – cYourWay