代码之家  ›  专栏  ›  技术社区  ›  F.P

在C#WinForms中引发自定义事件

  •  10
  • F.P  · 技术社区  · 14 年前

    可能我的应用程序设计也很混乱,如果你喜欢的话可以看看。

    这就是结构

    ProgramContext
     - Form MainWindow
      + Control TextBox
      + Control Button
      + ...
    

    MainWindow.TextBox 保存一些在运行时经常更新的信息。所以,我需要它在需要的时候刷新自己(这样它就可以从存储数据的数据库中重新加载数据)

    我试着用钩子钩住 EventHandler 到它的 Validating

    所以,基本上我有一个方法,在 ProgramContext

    DataTable table = _adapter.GetData();
    foreach (DataRow row in table.Rows)
    {
      MainWindow.TextBox.Text += table.Text.ToString();
    }
    

    每当另一个方法(将新数据写入 table )已执行。

    有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  16
  •   StuartLC    10 年前

    编辑:看起来你的问题更多的是关于挂钩到一个特定的事件,但是下面的FWIW是如何激发定制事件的。

    据我所知,您希望外部方监视从窗体上的文本框引发的事件,然后在另一个窗体上重新加载数据?

    MainForm.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    

    或者,在最新版本的C#:

    MainForm.textBox1.TextChanged += this.textBox1_TextChanged;
    

    添加您自己的自定义事件

    raise a custom event ,-例如。 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);
    }
    

    (出租车现在已经过时了)。