winform 中的方法如何监听 App_Code 中的事件/委托,而不是获取空事件?
Posted
技术标签:
【中文标题】winform 中的方法如何监听 App_Code 中的事件/委托,而不是获取空事件?【英文标题】:How does a method in a winform listen to an event/delegate in App_Code, and not get a null event? 【发布时间】:2011-09-30 18:31:47 【问题描述】:场景 -
程序打开一个winForm。用户输入信息,点击开始按钮。动作转移到 App_Code.Model 中的代码。当该代码完成后,winForm 后面的代码需要显示更新的信息。 App_Code.Model 不应该知道 winForm。本例中的 winForm 有一个按钮 btnStart 和一个文本框 tbInput。
但是当事件被引发时,它是空的,所以我做错了什么。请注意,这与从 winForms userControls 引发的事件无关,我知道网上有很多关于此的信息。
App_Code.Model 使用系统; 使用 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";
【问题讨论】:
什么是空值?如果调用 PrepareGame() 值将始终 == 2? TableViewChanged 始终为空,'else' 永远不应该执行。 【参考方案1】:也许我明白了。您有两个 Game 类实例:
在表单中并订阅事件。
在不订阅事件并调用 PrepareGame() 的 btnStart_Click 方法中,因此您不会收到事件通知。
将您的事件子接收代码移动到按钮单击处理程序,您就完成了。
【讨论】:
以上是关于winform 中的方法如何监听 App_Code 中的事件/委托,而不是获取空事件?的主要内容,如果未能解决你的问题,请参考以下文章
无法从 ASP.Net 网站项目中的代码访问 App_Code 中的类
c# winform 中如何写事件监听 比如监听listview.items.count是不是发生变化