我有自己创建的一些事件,并且想知道如何在我想要的时候提高它们.
可能我的应用程序设计也搞砸了,如果你愿意可能会看一下.
这是结构
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现在非常过时).