日期:2014-05-18 浏览次数:21391 次
private MyDialog m_dlg; private void toolStripButton1_Click(object sender, EventArgs e) { using (MyDialog dlg = new MyDialog(richTextBox1.Text)) { if (dlg.ShowDialog() == DialogResult.OK) { richTextBox1.Text = dlg.TextBoxValue; } } } private void toolStripButton2_Click(object sender, EventArgs e) { if (m_dlg == null) { m_dlg = new MyDialog(richTextBox1.Text); m_dlg.TextBoxChanged += new EventHandler( (sender1, e1) => { richTextBox1.Text = m_dlg.TextBoxValue; } ); m_dlg.FormClosed += new FormClosedEventHandler( (sender2, e2) => { m_dlg = null; } ); m_dlg.Show(this); } else { m_dlg.Activate(); } }
------解决方案--------------------
A 窗体,定义一个 事件:
delagate LabelText(string newText);
event LabelText ChangeLableText;
protected void InvokeChangeLableText(newText){
if(ChangeLableText!=null)
ChangeLableText.Invoke(newText);
}
然后,
B 窗体,在 打开 和 关闭时做到:
A.ChangeLableText += BChangeLable;
和 A.ChangeLableText -= BChangeLable;
private void BChangeLable(string newText)
{
lbl.Text=newText;
}
--------------------
这就是一个 委托机制了:B 和 A没有任何强关联和代码过分渗透;
----------------------------
当然:A 的 InvokeChangeLableText(newText) 是需要A自己调用的:
比如: InputTextChanged(object sender, *** e)
{
InvokeChangeLableText(txtInput.Text);
//文本框的值改变,则 触发事件;
//而此时的B,正在监视A的这个事件,于是 B就修改自己的值——绝对的实时同步!
}
------解决方案--------------------
额,楼上的做法和我一样的!!
——也用了事件的:
---------------------------------------
如果楼主需要监视的不是一个 字符串,而是 一个 object
那么,只需要
delagate LabelText(string newText);
改成
delagate LabelText(object newObject);
就可以了!!