窗体间传递复杂的数据

之前在学校的时候没有认真的学习winform的开发,现在就要狂补下了。

1、构造函数的方法:

不解释,先看代码:

public Form2(string msg) {
            InitializeComponent();
            label1.Text = msg;
        }

然后再Form3中就添加一个textbox和一个button

private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(textBox1.Text);
            f2.Show();
        }

 

2、定义一个公共属性,这个我就不测试了,以前是也有用过就是了(只是当时是用公共字段)

public string Msg{
  get{
  return textbox1.Text();
}
}

3、委托与事件传递

先定义一个类,具体先看代码:

public delegate void TextChangeHandler(string s);
    public class CallObject 
    {
        public string ResultValue = "";

        public event TextChangeHandler SelTextChanged;
        public void ChangeSelText(string s) {
            if (SelTextChanged != null) {
                SelTextChanged(s);
            }
        }
    }

然后再子窗体添加一个构造函数,以接受结果对象:

public Form2(CallObject cov) : this() {
            this.co = cov;
        }

第三步:在父窗体创建子窗体,并订阅cResult事件:

 private void button1_Click(object sender, EventArgs e)
        {
            CallObject co = new CallObject();
            co.SelTextChanged+=new TextChangeHandler(EventResultChanged);

            Form2 f2 = new Form2(co);
            f2.ShowDialog();
            textBox2.Text = "子窗体返回的值是:\r\n" + co.ResultValue;
        }
        private void EventResultChanged(string s) {
            textBox1.Text = s;
        }

最后,在子窗体中改变选择,通过CallBack传递给父窗体

private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            co.ChangeSelText("A");
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            co.ChangeSelText("B");
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            co.ChangeSelText("C");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            co.ResultValue = textBox1.Text;
            Close();
        }

ok

 

 

 

posted @ 2012-02-02 10:02  小霖2012  阅读(208)  评论(0)    收藏  举报