Передавать значение из родительской формы в дочернюю форму?

#c# #winforms

#c# #winforms

Вопрос:

Я пытаюсь передать значение, установленное в моей родительской форме, во вторую форму. Я создал свойство с частью get в родительской форме.

Я не хочу делать что-то вроде:

 Form2 secondForm = new Form2(value);
  

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

Комментарии:

1. Итак, в чем ваш вопрос?

2. Вам придется объяснить намного больше и показать некоторый код. Конечно, вы не можете просто создавать новые формы, если хотите передать что-то другой форме. И, пожалуйста, начните называть вещи правильно, Form2 и подобные имена легко вызовут проблемы.

3. почему этот вопрос задают каждую неделю по крайней мере один раз? в Google и здесь есть множество примеров.

Ответ №1:

Смотрите этот пример.

1-Создайте приложение оконной формы, объявите глобальную переменную public string в Form1, используя эту переменную, мы можем передавать значение из Form1 в Form2.

Видите это

введите описание изображения здесь

2-Теперь в form2 создайте объект для Form1 и получите значение, используя этот объект.

Смотрите изображение

введите описание изображения здесь

введите описание изображения здесь

Ответ №2:

Здесь у вас есть несколько возможностей:

Укажите ссылку из вашей первой формы в качестве значения

 Form2 secondForm = new Form2(yourForm1);
  

Таким образом, вы можете получить доступ через средство получения в вашей первой форме. yourForm1.MyValue;

Это кажется немного уродливым. Лучше всего создать интерфейс, который содержит ваше свойство и реализуется из вашей первой формы.

 public interface IValueHolder
{
   public int MyValue {get;}
}

public class FirstForm : Form, IValueHolder
{
   public int MyValue{get;}

   //Do your form stuff

   Form2 form = new Form2(this);
}
  

Таким образом, ваша Form2 просто использует интерфейс и остается независимой от Form1. Далее вы можете создать свойство в Form2, к которому вы получаете доступ из Form1. Например, если ваше свойство в Form1 изменяется, вы также устанавливаете значение из Form2.

 public class Form2 : Form
{
   public int MyValue{get;set;}
}

public class Form1 : Form
{
  private int _myValue;
  public int MyValue
  {
     set
     {
        if (_myValue != value)
        {
           form2.MyValue = value;
        }
     }
  }
}
  

По крайней мере, возможно, вы можете использовать событие. Кроме того, вы можете создать свойство в Form2, которое содержит ссылку на Form1 или IValueHolder, как описано выше.

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

Ответ №3:

Я не уверен в том, как вы собираетесь использовать Form2 в родительской форме (пусть это будет frmParent ). в любом случае вы можете выполнить любой из приведенных ниже шагов:

Определите свойство в дочерней форме как статическое, чтобы вы могли получить к нему доступ с помощью Form2.frmProperty .

Или определить свойство как общедоступное, а затем получить доступ через экземпляр класса, чтобы вы могли обращаться к переменной через этот экземпляр, пока экземпляр существовал. что-то вроде следующего:

 Form2 secondFormInstance = new Form2();
secondFormInstance.frmProperty = 10;

// at some later points

int childValue = secondFormInstance.frmProperty; // take value from that variable
secondFormInstance.frmProperty  ; // update the value
  

Или вы можете использовать то, что вы указали в вопросе.