本帖最后由 believe_miao 于 2011-12-20 19:39:37 编辑

解决方案 »

  1.   

    直接传递参数不可以?在a项目数据变化的事件中修改b窗体中的label的name
      

  2.   

    在你的窗体A中实例化窗体B,就可以控制窗口B的控件了,当然Lable的name或者text你也就可以修改了。初学乍练,不知道是否正确,印象中老师讲过。
      

  3.   

    MainForm.csprivate 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();
                }
            }
    MyDialog.cspublic event EventHandler TextBoxChanged;        public string TextBoxValue
            {
                get { return textBox1.Text; }
                set { textBox1.Text = value; }
            }        public MyDialog() : this("") { }        public MyDialog(string Param)
            {
                InitializeComponent();
                TextBoxValue = Param;
            }        private void button1_Click(object sender, EventArgs e)
            {
                Close();
            }        private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (TextBoxChanged != null)
                    TextBoxChanged(this, e);
            }
      

  4.   

    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就修改自己的值——绝对的实时同步!
            }
      

  5.   

    额,楼上的做法和我一样的!!——也用了事件的:---------------------------------------
    如果楼主需要监视的不是一个 字符串,而是 一个 object
    那么,只需要  
    delagate LabelText(string newText);
    改成 
    delagate LabelText(object newObject);就可以了!!