繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM