winform中的方法如何侦听App_Code中的事件/委托,而不获取null事件
本文关键字:事件 委托 获取 null Code 方法 何侦听 App winform | 更新日期: 2023-09-27 18:01:24
场景-
程序打开一个winForm。用户输入信息,单击"开始"按钮。操作转移到App_code.Model中的代码。当该代码完成时,winForm后面的代码需要显示更新的信息。App_Code.Model不应该知道winForm。本例中的winForm有一个按钮btnStart和一个文本框tbInput。
但是当事件被引发时,它是空的,所以我做错了什么。注意,这与winForms userControls引发的事件无关,我知道网上有很多关于这方面的信息。
应用程序代码模型使用系统;使用System.Collections.Generic;使用System.Linq;使用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
}
}
}
代码隐藏表单使用系统;使用System.Collections.Generic;使用System.ComponentModel;使用System.Data;使用System.Drawing;使用System.Linq;使用System.Text;使用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";
}
}
}
也许我能理解。您有两个Game类实例:
-
在表单的ctor中,并订阅事件。
-
在btnStart_Click方法中,该方法不订阅事件并调用PrepareGame((,因此您不会收到事件通知。
将事件子接收代码保存到按钮点击处理程序中,就完成了。