1

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

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;

}

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

Angus123
  • 2,555

3 Answers3

3

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

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

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

Shad
  • 3,453
  • 19
  • 23
3

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

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);
}

}

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
andreich
  • 6,094
2

Мой вариант:

В 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, с кнопкой я думаю вы тоже разберетесь.

Olter
  • 1,756
  • 2
  • 22
  • 50