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";
Другие вопросы по тегам