在C#中将事件从一个表单传播到另一个表单

时间:2009-06-10 18:18:59

标签: c# .net events event-handling

如何在一个表单中单击一个按钮并以另一种形式更新TextBox中的文本?

3 个答案:

答案 0 :(得分:15)

如果您尝试使用WinForms,则可以在“子”表单中实现自定义事件。单击“子”表单中的按钮时,可能会触发该事件。

然后,您的“父”表单将侦听事件并处理它自己的TextBox更新。

public class ChildForm : Form
{
    public delegate SomeEventHandler(object sender, EventArgs e);
    public event SomeEventHandler SomeEvent;

    // Your code here
}

public class ParentForm : Form
{
    ChildForm child = new ChildForm();
    child.SomeEvent += new EventHandler(this.HandleSomeEvent);

    public void HandleSomeEvent(object sender, EventArgs e)
    {
        this.someTextBox.Text = "Whatever Text You Want...";
    }
}

答案 1 :(得分:1)

粗略;一个表单必须引用一些持有该文本的底层对象;此对象应在文本更新时触发事件;另一种形式的TextBox应该有一个订阅该事件的委托,它将发现底层文本已经改变;一旦通知了TextBox委托,TextBox应该在底层对象中查询文本的新值,并使用新文本更新TextBox。

答案 2 :(得分:0)

假设WinForms;

如果文本框绑定到对象的属性,则应在对象上实现INotifyPropertyChanged接口,并通知要更改的字符串的值。

public class MyClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string title;
    public string Title {
      get { return title; } 
      set { 
        if(value != title)
        {
          this.title = value;
          if (this.PropertyChanged != null)
          {
             this.PropertyChanged(this, new PropertyChangedEventArgs("Title"));
          }
       }
  }

通过上述内容,如果绑定到Title属性 - 更新将“自动”到绑定到对象的所有表单/文本框。我建议上面发送特定事件,因为这是通知绑定更新对象属性的常用方法。