日期:2014-05-18  浏览次数:21274 次

关于vs2008 label控件!!!救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊!!!!
现在有两个项目,分别有两个窗体,比方说在A项目中的一个数据发生了变化,一旦这个数据发生变化,则想在B窗体的label控件中进行实时的更新,请问应该怎么做?

------解决方案--------------------
直接传递参数不可以?在a项目数据变化的事件中修改b窗体中的label的name
------解决方案--------------------
MainForm.cs
C# code

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

就可以了!!