Как передать значение из дочернего элемента обратно в родительскую форму?

Как передать значение из дочернего элемента обратно в родительскую форму? У меня есть строка, которую я хотел бы передать родителям.

Я запустил ребенка, используя:

FormOptions formOptions = new FormOptions(); formOptions.ShowDialog(); 

11 Solutions collect form web for “Как передать значение из дочернего элемента обратно в родительскую форму?”

Создайте свойство (или метод) в FormOptions , скажем, GetMyResult :

 using (FormOptions formOptions = new FormOptions()) { formOptions.ShowDialog(); string result = formOptions.GetMyResult; // do what ever with result... } 

Если вы просто используете formOptions, чтобы выбрать одно значение, а затем закрыть, предложение Митча – хороший способ пойти . Мой пример здесь будет использоваться, если вам понадобится, чтобы ребенок вернулся к родительскому, оставаясь открытым.

В своей родительской форме добавьте общеansible метод, который будет вызывать дочерняя форма, например

 public void NotifyMe(string s) { // Do whatever you need to do with the string } 

Затем, когда вам нужно запустить дочернее окно из родителя, используйте этот код:

 using (FormOptions formOptions = new FormOptions()) { // passing this in ShowDialog will set the .Owner // property of the child form formOptions.ShowDialog(this); } 

В дочерней форме используйте этот код, чтобы передать значение родительскому:

 ParentForm parent = (ParentForm)this.Owner; parent.NotifyMe("whatever"); 

Код в этом примере будет лучше использоваться для чего-то вроде windows панели инструментов, которое должно плавать над основной формой. В этом случае вы должны открыть дочернюю форму (с .TopMost = true), используя .Show () вместо .ShowDialog ().

Подобный дизайн означает, что дочерняя форма тесно связана с родительской формой (поскольку ребенок должен отдать своего владельца в качестве ParentForm, чтобы вызвать его метод NotifyMe). Однако это не так уж плохо.

Вы также можете создать публичное свойство.

 // Using and namespace... public partial class FormOptions : Form { private string _MyString; // Use this public string MyString { // in get { return _MyString; } // .NET } // 2.0 public string MyString { get; } // In .NET 3.0 or newer // The rest of the form code } 

Затем вы можете получить его с помощью:

 FormOptions formOptions = new FormOptions(); formOptions.ShowDialog(); string myString = formOptions.MyString; 

Вы также можете создать перегрузку ShowDialog в своем дочернем classе, который получает параметр out, который возвращает результат.

 public partial class FormOptions : Form { public DialogResult ShowDialog(out string result) { DialogResult dialogResult = base.ShowDialog(); result = m_Result; return dialogResult; } } 

Использовать открытое свойство дочерней формы

 frmOptions { public string Result; } frmMain { frmOptions.ShowDialog(); string r = frmOptions.Result; } 

Использовать события

 frmMain { frmOptions.OnResult += new ResultEventHandler(frmMain.frmOptions_Resukt); frmOptions.ShowDialog(); } 

Использовать публичное свойство основной формы

 frmOptions { public frmMain MainForm; MainForm.Result = "result"; } frmMain { public string Result; frmOptions.MainForm = this; frmOptions.ShowDialog(); string r = this.Result; } 

Использовать объект Control.Tag; Это является общим для всех элементов управления public, которые могут содержать System.Object. Вы можете держать там строку или MyClass или MainForm – что угодно!

 frmOptions { this.Tag = "result": } frmMain { frmOptions.ShowDialog(); string r = frmOptions.Tag as string; } 

Для Picrofo EDY

Это зависит, если вы используете ShowDialog() как способ показа вашей формы и закрыть ее, вместо этого вы используете кнопку закрытия. this.Close() . Форма не будет удалена или уничтожена, она будет скрыта, и изменения могут быть сделаны после того, как они исчезли. Чтобы правильно закрыть его, вам понадобится метод Dispose() или Close() . С другой стороны, если вы используете метод Show() и вы его закрываете, форма будет удалена и не может быть изменена после.

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

Для получения дополнительной информации проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult(v=vs.110).aspx

Ну, я только что столкнулся с той же проблемой – может быть, немного иначе. Однако, я думаю, именно так я решил это:

  1. в моей родительской форме я объявил RefDateSelect myDateFrm; форму без экземпляра, например RefDateSelect myDateFrm; Таким образом, это доступно для моих других методов в этом classе / форме

  2. Далее, метод отображает дочерний элемент по новому экземпляру:

     myDateFrm = new RefDateSelect(); myDateFrm.MdiParent = this; myDateFrm.Show(); myDateFrm.Focus(); 
  3. мой третий метод (который хочет получить результаты от ребенка) может прийти в любое время и просто получить результаты:

     PDateEnd = myDateFrm.JustGetDateEnd(); pDateStart = myDateFrm.JustGetDateStart();` 

    Примечание: дочерние методы JustGetDateStart() в CHILD как:

     public DateTime JustGetDateStart() { return DateTime.Parse(this.dtpStart.EditValue.ToString()); } 

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

Многие способы кошки кошки здесь и предложение @ Митча – хороший способ. Если вы хотите, чтобы в клиентской форме было больше «контроля», вы можете передать экземпляр родителя ребенку при его создании, а затем вы можете вызвать любой открытый родительский метод для дочернего элемента.

Я думаю, что самый простой способ – использовать свойство Tag в вашем classе FormOptions, установить значение Tag =, которое необходимо передать, и после того, как метод ShowDialog прочитал его как

 myvalue x=(myvalue)formoptions.Tag; 

Когда вы используете метод ShowDialog() или Show() , а затем закройте форму, объект формы не будет полностью уничтожен ( закрытие! = Уничтожение ). Он останется в живых, только он находится в «закрытом» состоянии, и вы все еще можете что-то делать.

  • Закругленные края в кнопке C # (WinForms)
  • Клиент сервера посылает / получает простой текст
  • Как передать объект из формы1 в form2 и обратно в form1?
  • Как отобразить форму Windows в полноэкранном режиме на панели задач?
  • Скрытие нежелательных свойств в пользовательских элементах управления
  • Как изменить список избранных строк, даже если вы фокусируетесь на другом элементе управления?
  • Как я могу исправить приложение Windows .NET при запуске с кодом исключения: 0xE0434352?
  • Как мы можем показать индикатор выполнения для загрузки с помощью FtpWebRequest
  • Создание динамической кнопки и размещение их в предопределенном порядке с использованием c #
  • SendKeys.Send и ключ Windows
  • Как настроить системное меню формы Windows?
  • Interesting Posts

    запустить exe, который упакован внутри банки

    Как вы компилируете проект из источника?

    Какими вещами я должен работать ежедневно, еженедельно, ежемесячно на своей машине с Windows?

    Преобразование массива объектов в массив их примитивных типов

    Операция Не разрешена, когда на корне – El Capitan (без корней)

    Создание runnable JAR с Gradle

    Почему вы должны использовать strncpy вместо strcpy?

    Selenium WebDriver : как нажимать на элементы в SVG с помощью XPath

    Поиск массивов «не найден», даже если он найден

    Открыть Fancybox (или equiv) из типа ввода формы = “отправить”

    Почему подключенный раздел NTFS не отображается в файловом менеджере Linux?

    Ошибка синтаксиса из-за использования зарезервированного слова в качестве имени таблицы или столбца в MySQL

    Как загрузить файл с помощью библиотеки Volley в android?

    В Java можно узнать, загружен ли class?

    Firefox: добавьте пользовательский поиск Google, включая предварительно определенные ключевые слова

    Давайте будем гением компьютера.