Обновление текстового поля в mainform с помощью переменной дочерней формы, запускаемой из главной формы - PullRequest
1 голос
/ 23 августа 2010

У меня есть приложение Windows Form. Основная форма имеет текстовое поле и кнопку для запуска другой формы. Когда запускается другая форма, обе формы отображаются на экране (но запущенная форма является модальной). Дочерняя форма имеет текстовое поле и кнопку, и когда кнопка нажата, я хочу, чтобы текстовое поле в главной форме (родительском) было обновлено значением в текстовом поле дочерней формы.

Как достигается эта функциональность?

Ответы [ 4 ]

2 голосов
/ 23 августа 2010

В идеале вы хотите, чтобы обе формы не зависели друг от друга, это может быть достигнуто с помощью интерфейсов:

public interface IMainView
{
  public void UpdateValue(string val);
}

public interface IChildView
{
  public void Show(IMainView parent);
}

пусть ваша основная форма реализует IMainView, а дочерняя - IChildView, родитель вызывает child.show (this), а дочерний вызывает parent.UpdateValue (blah);

Надеюсь, это поможет.

1 голос
/ 23 августа 2010

Лучшим способом достижения этой ситуации являются советы ClockWize и Hans Passants. Но как насчет этого?

Напишите свойство для вашего текстового поля в parent форме, как это.

public string TextBoxText
{
get { return txtTextBox.Text;}
set { txtTextBox.Text = value;}
}

Когда вы открываете дочернюю форму, установите владельца.

ChildForm f = new ChildForm();
f.Owner = this;
f.Show();

Создание обработчика событий для события нажатия кнопки дочерних форм .

public Button1_Click(object sender; EventArgs e)
{
ParentForm f = (ParentForm)this.Owner;
f.TextBoxText = txtChildTextBox.Text;
}

я не компилировал код; поэтому могут быть ошибки:)

}

1 голос
/ 23 августа 2010

Если дочерняя форма закрывается при нажатии кнопки, вы можете поместить открытое свойство, которое переносит значение текстового поля в дочернюю форму.Затем основная форма может прочитать это свойство после вызова ShowDialog.

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

1 голос
/ 23 августа 2010

При нажатии кнопки, чтобы закрыть запущенную форму, возвращая вас к основной форме - текстовое поле запущенной формы все еще находится в области видимости.

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

Ваша основная форма может иметь такой код прямо сейчас (пока не делал winforms, так что терпите меня, если я что-то пропущу):

public void Button1_Click(object sender, ClickEventArgs e)
{
    SomeFormIWantToLaunch launchForm = new SomeFormIWantToLaunch();
    launchForm.ShowDialog(this);
}

Вам нужно просто добавить после launchForm.ShowDialog(this); что-то вроде:

this.SomeTextBox.Text = launchForm.ATextBox.Text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...