日期:2014-05-18 浏览次数:21530 次
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);
就可以了!!