Как я могу передать значения из одной формы в другую?
Рассмотрим ситуацию, когда у меня есть две формы окна, скажем F1
а также F2
, После использования F1
Я сейчас позвонил F2.ShowDialog()
, Это ставит F2
на экране также. Теперь, когда обе формы видны, как я могу передавать данные из F1
в F2
? Кроме того, один раз F2
(Модальное диалоговое окно) заканчивается, как я могу вернуть данные F1
?
10 ответов
Кто-нибудь думал просто передать значение в форму в атрибуте тега.
Form newForm = new form();
newForm.Tag = passValue;
newform.showmodal();
когда отображается newform, программа загрузки (или любая другая) может использовать данные в теге
public void load()
{
if (this.Tag.length > 0)
{
// do something with the data
}
}
int x=10;
Form1 f2 = new Form1(x);
f2.ShowDialog();
Это написано в форме, которая передаст значение. Чтобы получить это значение, вы должны сделать новый конструктор в полученной форме
и это будет так
public Form2(int x)
{
InitializeComponent();
this.x = x;
}
и будет замечено в первой форме, когда вы создаете экземпляр из form2, у вас есть два варианта, один из которых позволит вам передать значение
Добавьте этот код в соответствующем месте в вашей от f1.
Form f2 = new Form();
f2.ShowDialog();
НТН
Допустим, у вас есть элемент управления TextBox в Form1, и вы хотите передать значение из него в Form2 и показать Form2 модально.
В форме 1:
private void ShowForm2()
{
string value = TheTextBox.Text;
Form2 newForm = new Form2();
newForm.TheValue = value;
newForm.ShowDialog();
}
В форме 2:
private string _theValue;
public string TheValue
{
get
{
return _theValue;
}
set
{
_theValue = value;
// do something with _theValue so that it
// appears in the UI
}
}
Это очень простой подход, и он может быть не лучшим для более крупного приложения (в этом случае вы захотите изучить шаблон MVC или аналогичный). Ключевым моментом является то, что вы делаете вещи в следующем порядке:
- Создайте экземпляр формы для отображения
- Перенос данных в этот новый экземпляр формы
- Показать форму
Когда вы показываете форму модально, она будет блокировать код в вызывающей форме до тех пор, пока не закроется новая форма, поэтому у вас не будет кода, который будет просто передавать информацию в новую форму (это возможно, но излишне сложно),
[edit: расширенные свойства свойства в Form2, чтобы быть более понятным]
Используйте определенный тип для вашей информации (класс, структура...) и объявите переменную этого в Form1
struct myData
{
String str1;
String str2;
}
Public Class Form1
{
Public myData dat;
}
(Примечание: тип не должен быть общедоступным, это просто для примера). Таким образом, данные находятся в Form1. Измените конструктор Form2 так, чтобы он принимал параметр типа Form1.
public Form2(Form1 frm1)
{
mFrm1 = frm1;
InitializeComponent();
}
Теперь, когда вы вызываете form2, отправьте тот самый экземпляр Form1, который выполняет вызов:
Form2 frm2 = new Form2(this);
frm2.ShowDialog();
Теперь, когда выполнение достигло Form2, вы можете получить доступ к MyData в Form1:
mFrm1.dat;
Таким образом, оба экземпляра Form1 и Form2 будут ссылаться на данные, которые находятся в одном месте. Внесение изменений / обновлений будет доступно для обоих экземпляров форм.
Подумайте об использовании шаблона MVC, то есть вместо того, чтобы иметь слишком много данных в формах и передавать их, используйте классы моделей, которые сохраняют материал.
Позвольте мне перефразировать вопрос: я задаю форму 2: f1, f2... я называю форму f2 = новая форма (); f2.ShowDialog ();
// теперь мне нужно передать параметр из окна f1 в f2 (это модальное диалоговое окно) и вернуть значение из формы f2 в f1
// теперь я использую переменные, которые находятся в общем пространстве имен (для обоих f1, f2)
Если вы просто хотите отправить данные в свой дочерний диалог, рассмотрите возможность добавления параметров в конструктор дочернего диалога, а затем вызовите ShowDialog(). Передача данных другим способом, однако, немного сложнее.
Может быть, я опоздал. но все те, кто может хотеть.
В форме назначения есть конструктор, определенный следующим образом
public partial class Destination: Form
{
string valueAccepted;
public Destination(string _valuePassed)
{
InitializeComponent();
this.valueAccepted= _valuePassed;
}
}
и в исходной форме вызвать форму, как это
Source sourceForm= new Source ("value Passed");
sourceForm.ShowDialog();
таким образом "значение прошло" передается из источника формы в место назначения формы
Есть несколько способов передачи данных между двумя формами, проверьте эти ссылки, на которых есть примеры видео, чтобы сделать это
-FormToForm Использование свойств - http://windowsclient.net/learn/video.aspx?v=108089
- FormToForm с использованием параметров - http://windowsclient.net/learn/video.aspx?v=105861