[英]Raise custom events in C# WinForms
我有自己创建的一些事件,并且想知道如何在我想要的时候提高它们。
可能我的应用程序设计也搞砸了,如果你愿意可能会看一下。
这是结构
ProgramContext
- Form MainWindow
+ Control TextBox
+ Control Button
+ ...
在这种情况下, MainWindow.TextBox
包含一些在运行时经常更新的信息。 所以,我想以某种方式需要它自己刷新(所以它可以从数据库重新加载它的数据,它存储在哪里)
我尝试将一个EventHandler
挂钩到它的Validating
-Event,但这似乎没有办法。
所以,基本上我有重新加载数据的方法ProgramContext
DataTable table = _adapter.GetData();
foreach (DataRow row in table.Rows)
{
MainWindow.TextBox.Text += table.Text.ToString();
}
只要执行另一个方法(将新数据写入table
),就需要这样做。
有任何想法吗?
编辑:看来你的问题更多的是关于挂钩特定事件,但下面的FWIW是如何解雇一般的自定义事件。
处理TextBox已更改的事件
根据我的理解,您希望外部方监视从表单上的文本框引发的事件,然后在另一个表单上重新加载数据?
快速而肮脏的是将Form TextBox公开,然后其他人可以订阅此事件
MainForm.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
或者,在更新版本的C#中:
MainForm.textBox1.TextChanged += this.textBox1_TextChanged;
添加自己的自定义事件
另一种更清洁的方法是提出自定义事件 ,例如下面的MyDataChangedEvent
。 这将允许您抽象出更改来自文本框的事实。
// Assuming you need a custom signature for your event. If not, use an existing standard event delegate
public delegate void myDataChangedDelegate(object sender, YourCustomArgsHere args);
// Expose the event off your component
public event myDataChangedDelegate MyDataChangedEvent;
// And to raise it
var eventSubscribers = MyDataChangedEvent;
if (eventSubscribers != null)
{
eventSubscribers(this, myCustomArgsHere);
}
您还可以查看Ent Lib组合应用程序块和智能客户端软件工厂 - 它具有非常灵活的事件代理/发布子机制,用于以松散耦合的方式跨UI“SmartParts”(控件,表单对话框等)进行同步。 (CAB现在非常过时)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.