在A界面有一按键打开B界面,然后从B界面传回一个值。
在B界面代码有(部份):
        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            UILevel.AgrMain agrMain = new AgrMain();
            if (treeView1.SelectedNode.LastNode == null) //判断是否为末节结点
            {
                textBox1.Text = e.Node.Text; //获取节点文本
                BussinessLevel.ShareClass.GroupID = e.Node.Text.Trim();
                this.Close();
            }
            else
            {
                textBox1.Text = "";
            }
        }
在A界面代码如下:
        private void AgrMain_EnabledChanged(object sender, EventArgs e)
        {
            textBox3.Text = BussinessLevel.ShareClass.GroupID;
        }
为什么值传不过来?请前辈指点!特别说明,A界面中嵌套一个自定义控件,textBox3是在该自定义控件中。不知道是不是这里影响?

解决方案 »

  1.   

    两个BussinessLevel是一个实例吗?简单点就是A打开B的时候,把自己传过去. 伪代码:
    B b = new B();
    b.a = this;
    b.Show();
    然后b中就可以调用A的public函数,或者读写public的属性了。
      

  2.   

    要想耦合性低点,可以使用Delegate.参考:
    C# WinForm传值
    http://blog.csdn.net/renyouprince/article/details/3304906
      

  3.   

    谢谢!
    我把你的代码直接贴在这,以便让更多的人知道!
    在WinForm之间传值有很多种方法,在这里我用的是delegate and event进行传值.
    新建一个WindowsApplication,创建两个WinForm.其实它们就是两个类.
    每个WinForm中各加入一个Button和一个TextBox.
    在WinForm2中写入代理和事件(delegate and event)如下:
    //代理声明
    public delegate void SendMessage(string str);
    //事件声明
    public event SendMessage SendEvent;
    private void btnSend_Click(object sender, EventArgs e)
    {
           //调用事件
          SendEvent(textBox1.Text);
    }
    在WinForm1中写入如下代码:
    private void btnShow_Click(object sender, EventArgs e)
    {
            Form2 f2 = new Form2();
            //Form2事件注册
            f2.SendEvent+=new Form2.SendMessage(GetMessage);
            f2.Show();
    }
    //代理调用的方法
    public void GetMessage(string str)
    {
           textBox1.Text = str;
    }
    在点击WinForm1的Button弹出WinForm2后,在WinForm2中文本框输入文字,然后点击按钮,信息将会立刻发送到WinForm1,并显示出来.