Распространение событий из одной формы в другую форму в C#

Как я могу нажать кнопку в одной форме и обновить текст в текстовом поле в другой форме?

3 ответов


Если вы пытаетесь использовать WinForms, вы можете реализовать пользовательское событие в своей "дочерней" форме. Вы можете запустить это событие, когда была нажата кнопка в вашей форме "ребенок".

ваша" родительская " форма будет прослушивать событие и обрабатывать его собственное обновление текстового поля.

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...";
    }
}

грубо; одна форма должна иметь ссылку на некоторый базовый объект, содержащий текст; этот объект должен инициировать событие при обновлении текста; текстовое поле в другой форме должно иметь делегат, подписывающийся на это событие, которое обнаружит, что базовый текст изменился; как только делегат текстового поля будет проинформирован, текстовое поле должно запросить базовый объект для нового значения текста и обновить текстовое поле новым текстом.


Предполагая 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-обновление будет проходить "автоматически" ко всем формам/текстовым полям, которые привязываются к объекту. Я бы рекомендовал это выше отправки конкретных событий, так как это общий способ уведомления привязки обновления свойств объекта.