Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Как передать данные из Form2 в Form1 не закрывая формы?

#c_sharp #net #winforms


Есть Form1. На ней размещены richTextBox1 и Button1. Button1 вызывает Form2. 

На Form2 есть textBox1 и Button1.

ВОПРОС:
Как при нажатии на Form2.Button1 пеердать текстовое сообщение из Form2.textBox1 в
Form1.richTextBox1? При этом не закрывая ни одну из форм?

Есть подозрение, что лучший и самый универсальный способ это сделать — это использовать
делегаты. Но что-то я никак не соображу, как это правильно сделать?
    


Ответы

Ответ 1



Аргументы события public class MyEventArgs : EventArgs { private readonly string _text; public string Text { get { return _text; } } public MyEventArgs(string text) { _text = text; } } форма 2: public partial class Form2 : Form { public Form2() { InitializeComponent(); } public delegate void MyEventHandler(object sender, MyEventArgs args); public event MyEventHandler MyEvent; protected virtual void MyEventRaise() { if(MyEvent != null) MyEvent(this, new MyEventArgs(textBox1.Text)); } private void button1_Click(object sender, EventArgs e) { MyEventRaise(); } } на первой фоме подписываемся на событие var form2 = new Form2(); form2.MyEvent += Form2_MyEvent; разбираем что у нас там пришло private void Form2_MyEvent(object sender, MyEventArgs args) { // Текст из текстбокса, вставляем куда нам надо richTextBox1.Text += args.Text; }

Ответ 2



Есть несколько путей решения это задачи: Передать в Form2 ссылку на Form1 - это можно сделать классическими тремя путями: конструктор, свойство, контекст; Конструктор: форма 1 var form_2 = new Form2(this); форма 2 private Form1 form_1; public Form2(Form1 obj) { this.form_1 = obj; } private void f() { this.form_1.RichTextBox1.Lines[0] = "Hello"; } Свойство: форма 1: var form_2 = new Form2(); form_2.UpForm = this; форма 2: public class Form2 : Form { public Form1 UpForm { get; set; } private void f() { this.UpForm.RichTextBox1.Lines[0] = "Hello"; } } Контекст: Делается через статический объект. Объект: static internal class GLOBAL { static public Form1 CONTEXT_FORM; } форма 1: GLOBAL.CONTEXT_FORM = this; var form_2 = new Form2(); форма 2: private void f() { GLOBAL.CONTEXT_FORM.RichTextBox1.Lines[0] = "Hello"; } Через событие: описать в Form2 event, а в Form1 на него подписаться. (Вам уже описал Dmitry)

Комментариев нет:

Отправить комментарий