Передача данных между формами

118
12 января 2021, 06:50

Здравствуй ХэшКод, скажите у меня есть

Form1
Form2

На Form1 есть richTextBox1, и на Form2 есть richTextBox1, так вот хотелось бы сделать чтобы при нажатии на кнопку всё что есть в richTextBox1 на Form2 данные передавались в richTextBox1 на Form1... я попробовал изменить поле Modifer на Public, b таким кодом переместить данные

 private void btnAdd_Click(object sender, EventArgs e)
  {
    Form1 frm = new Form1();
    frm.richTextBox1.Text = this.richTextBox1.Text;
  }

Но он почему-то не работает( Подскажите как передать данные между формами?

Answer 1

Всю необходимую форме (или любому объекту) информацию следует передавать в конструкторе:

public partial class Form1
{
    public Form1(string text)
    {
        InitializeComponents();
        richTextBox1.Text = text;
    }
}
//-------------------------------
...
var form = Form1("some message");

UPD Также в классе Form есть свойсвто Owner, которому можно присвоить форму-владельца. В итоге дочерняя форма будет иметь доступ к родительской через это свойство.

Answer 2

Как вариант, можно использовать делегаты, и передавать данные через них.

public partial class Form1
{
    public Form1()
    {
        InitializeComponents();
        sec = new Form2();
        sec.Show();
        sec.MyDelegateEvent += sewsecondWindow.MyDelegate(sec_MyDelegateEvent);
    }
    void sec_MyDelegateEvent(string s)
    {
        richTextBox1.Text = s;
    }
}
public partial class Form2
{
    public Form2()
    {
        InitializeComponents();
    }
    public event MyDelegate MyDelegateEvent;
    public delegate void MyDelegate(string s);
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        MyDelegateEvent(richTextBox2.Text);
    }
}
Answer 3

Мой вариант:

В Form1 делаем richTextBox1 public. В ней же создаем экземпляр класса Form2

 public Form2 form;

Далее, описываем метод:

 private void buttonOpenForm2_Click(object sender, EventArgs e)
        {
            form = new Form2();
            form.Tag = this;
            form.Show();
        }

Ну и собственно в Form2:

public partial class Form2 : Form
    {
        Form1 form;
        public Form2()
        {
            InitializeComponent();
        }
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            ((Form1)this.Tag).richTextBox1.Text = richTextBox1.Text;
        }
    }

P.S. Этот вариант будет сразу же передавать весь текст в Form1, с кнопкой я думаю вы тоже разберетесь.

READ ALSO
собрать все зависимости в один DLL в C# проект

собрать все зависимости в один DLL в C# проект

У меня есть проект dll (dllMy) котрая использует ряд других сторонних dll(dllDep) которые я включаю к Reference в проектМне необходимо в номо проекте обращатся...

122
Получить данные из ячейки DataGridView c#

Получить данные из ячейки DataGridView c#

Путем парсинга считываю данные из таблицы excel в datatable, затем уже выставляю в DataGridView, есть ячейки в которых две-три строки, необходимо вытащить...

109
Заполнение БД через приложение WPF

Заполнение БД через приложение WPF

Пишу приложение на WPF, которое взаимодействует с БД MySQLВнутри TabItem есть DataGrid, который выводит данные из БД:

127