Вы можете назначать события и обработчики событий по своему усмотрению. Вот пример кода. Есть две формы, каждая с кнопкой и меткой. В Form2 есть текстовое поле, в которое вы можете ввести tesxt. При нажатии кнопки на Form2 изменяется текст метки и инициируется событие, которое подхватывается Form1. Затем метка на Form1 меняется, чтобы соответствовать метке на Form2.
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 dlg = new Form2();
dlg.NameChanged += OnNameChanged;
dlg.ShowDialog();
}
private void OnNameChanged(object sender, NameChangeEventArgs args)
{
this.label1.Text=args.NewName;
}
}
public class NameChangeEventArgs : EventArgs
{
public NameChangeEventArgs(string name)
{
this.NewName=name;
}
public string NewName{get;private set;}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
label1.Text = textBox1.Text;
if (this.NameChanged != null)
{
this.NameChanged(this, new NameChangeEventArgs(label1.Text));
}
}
public event EventHandler<NameChangeEventArgs> NameChanged;
}
}
изменить – извините, я неправильно прочитал ваш вопрос.
Если вы хотите избежать этого
Form2 dlg = new Form2();
dlg.NameChanged += OnNameChanged;
dlg.ShowDialog();
Затем вы можете изменить конструктор Form2 на:
public Form2(EventHandler<NameChangeEventArgs> eventhandler)
{
InitializeComponent();
NameChanged += eventhandler;
}
Затем вы настраиваете и показываете Form2 следующим образом:
Form2 dlg = new Form2(OnNameChanged);
dlg.ShowDialog();
К сожалению, теперь действительно есть способ избежать оператора +=
при назначении обработчиков событий, поскольку они должны быть назначены после создания экземпляра родительского класса. Конечно, вы можете создать экземпляр диалогового окна один раз и просто не показывать его до тех пор, пока оно не потребуется, но тогда вам придется справляться с закрытием и уничтожением диалогового окна, что означает не использование ShowDialog, а Show вместо этого, поэтому вам потребуется вставить код, чтобы гарантировать, что диалог остается модальным.
person
ChrisBD
schedule
25.08.2010