#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
Или вы можете использовать то, что вы указали в вопросе.