Распространение событий из одной формы в другую форму в C # - PullRequest
6 голосов
/ 10 июня 2009

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

Ответы [ 3 ]

15 голосов
/ 10 июня 2009

Если вы пытаетесь использовать 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 голос
/ 10 июня 2009

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

0 голосов
/ 10 июня 2009

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

...