Dockpanel Suite и передача данных по нескольким формам
Привет, я не смог найти ничего, что ссылалось бы именно на то, что я искал. Я видел много примеров на сайтах передачи данных между двумя формами, такими как
Как я могу передать значения из одной формы в другую? Использование элементов управления одной формы в другую Как получить доступ к элементам управления в унаследованной форме?
Поверх нескольких блогов и часов чтения и не получая его.
Так что в основном вот акт, который я пытаюсь выполнить с помощью DockPanel Suite
Основная форма parentForm
Имеет форму Form1
закрепленный внутри, который всегда там. Не может быть удален или перезагружен является константой (поэтому всегда должен быть один и тот же экземпляр, я бы предположил), который имеет текстовое полеfrm1Box
,parentForm
имеет строку меню с кнопкой button1
который откроет третью форму Form2
это также имеет текстовое поле frm2Box
, Я хотел бы иметь возможность нажать button1
(От parentForm
) открой Form2
и передать все, что есть в frm1Box
в frm2Box
,
Так что при чтении казалось, что настройка свойств - это то, что всем рекомендовано, и именно это я и сделал, и это прекрасно работает, если я просто сделаю это, нажав кнопку на form1, чтобы открыть form2 и передать данные, но я не могу понять, когда добавив еще одну форму. Это, очевидно, не мой полный код, я буду рад опубликовать мой фактический код, если он нужен только для экономии места.
//Parent Form
public partial class parentForm : Form
public static Form1 form1 = new Form1();
public void showForm1()
{
form1 = new Form1();
form1.Show(dockPanel1, DockState.DockLeft);
}
private void parentForm_Load(object sender, EventArgs e)
{
showForm1();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.CustNameCb = form1.CustName;
form2.Show();
}
//Form1
public partial class Form1 : DockContent
{
private string _custName;
public Form2()
{
InitializeComponent();
}
public string CustName
{
get
{
return _custName;
}
set
{
_custName = value;
frm1Box.Text = _custName;
}
}
//Form2
public partial class Form2 : Form
{
private string _custNameCb;
public Form2()
{
InitializeComponent();
}
public string CustNameCb
{
get
{
return _custNameCb;
}
set
{
_custNameCb = value;
frm2Box.Text = _custNameCb;
}
}
Я думаю, что мне не хватает этой концепции в целом, но я не смог найти "хороший" пример этого в своих поисках или хотя бы один, которому я мог бы следовать. Я новичок в программировании и C#, в частности, поэтому, пожалуйста, прости мою неопытность. Если у кого-то есть лучший способ сделать это, пожалуйста, дайте мне знать. Я рассмотрел использование SQL для хранения данных. Я бы предпочел не использовать файловое хранилище, если это возможно. Также стоит отметить, что как только я найду правильный способ сделать это, его нужно будет масштабировать, потому что когда я на самом деле реализую это, это будет 5 разных кнопок на parentForm, открывающих 5 разных форм, но все еще вытягивающих данные из той же Form1 Form1 будет иметь около 10 текстовых полей данных для извлечения.
Заранее спасибо за любые ответы.
2 ответа
Ты так близко. В ваших Свойствах "установщик" отображает переданное значение в TextBox, но как "получатель" извлекает значение из TextBox? Он только возвращает значение, хранящееся в закрытой переменной. Для Form1 вы устанавливаете закрытую переменную "_custName" каким-либо образом (теперь показано) через код (например, через событие TextChanged())?
Если нет, измените Свойство на:
public string CustName
{
get
{
return frm1Box.Text;
}
set
{
frm1Box.Text = value;
}
}
Это вернет значение, которое на самом деле находится в TextBox, и мы надеемся получить его во второй форме...
Я не работал с этим элементом управления в C#, просто VB, но я сделаю все возможное, чтобы описать, как это будет сделано в C#.
Чтобы получить доступ к элементам управления в другой форме, вызывающая форма должна иметь экземпляр формы, к которой она пытается получить доступ. Это может быть выполнено при инициализации объекта формы с использованием внедрения зависимости.
Form1 frm1 = new Form1();
Form2 frm2 = new Form2(frm1);
frm1.show(dockpanel1, DockState.dockright);
frm2.show(dockpanel1, DockState.dockleft);
Форма 2 потребует переменной экземпляра типа Form1.
private Form1 frm1;
Эта переменная будет установлена через конструктор класса.
public Form2(Form1 f) {
frm1 = f;
}
Публичный контент Form1 теперь доступен для Form2. Например, скажем, Form1 имеет текстовое поле с именем txtName. Вы можете установить атрибут text с помощью следующего кода:
frm1.txtName.text="Any Name";