WinForm一个窗体调用另一个窗体的控件和事件的方法

时间:2022-08-30 22:49:36


假设现在我有一个主窗体Form1,现想在另外两个窗体Form2,Form3中运用不同的方法来实现:修改Form2,Form3中的numericUpDown的值时Form1中textbox值随之改变。

(1)直接将整个窗体作为参数传给另一个窗体

这是Form1中的代码:

WinForm一个窗体调用另一个窗体的控件和事件的方法

这是Form2中代码:

WinForm一个窗体调用另一个窗体的控件和事件的方法

(2)使用委托与事件(推荐)

Form1中代码:

public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        //改变值的事件
        private void frm2_changed(string s)
        {
            //此处是给原有窗体中控件赋值
            this.textBox1.Text = s + s;
        }

        //清空值的事件
        private void frm3_empty(string s)
        {
            this.textBox1.Text = "";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var frm3 = new Form3();
            //这是委托与事件的第二步,
            //写到+=时,按两次Tab键会自动生成frm2_changed,frm3_empty两个事件
            frm3.changed += new Form3.Form2Handle(frm2_changed);//改变值的事件
            frm3.empty += new Form3.Form2Handle(frm3_empty);//清空值的事件
            frm3.ShowDialog();
        }
    }

Form3中代码:

 public partial class Form3 : Form
    {
        //定义带参数的委托与两个事件
        //这是委托与事件的第一步
        public delegate void Form2Handle(string s);
        public event Form2Handle changed;
        public event Form2Handle empty;

        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {

        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            //这是委托与事件的第三步
            //传值
            changed(numericUpDown1.Value.ToString());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            empty(numericUpDown1.Value.ToString());
        }
    }

源代码地址:http://download.csdn.net/detail/qiujialongjjj/4816273