当前位置:  开发笔记 > 编程语言 > 正文

在C#WinForms中提升自定义事件

如何解决《在C#WinForms中提升自定义事件》经验,为你挑选了1个好方法。

我有自己创建的一些事件,并且想知道如何在我想要的时候提高它们.

可能我的应用程序设计也搞砸了,如果你愿意可能会看一下.

这是结构

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),就需要这样做.

有任何想法吗?



1> StuartLC..:

编辑:看来你的问题更多的是关于挂钩特定事件,但下面的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现在非常过时).


在你的例子中,不是声明一个新的委托,而是在公共事件EventHandler MyEvent中使用泛型`EventHandler`更清楚.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有