• WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码)


        先申明下,此文适合和我差不多的菜鸟学习,没有什么高深知识点,不想耽误老鸟们的宝贵时间,如果有什么专业术语不对的还请指正啊。

        最近进行WinCE的开发,第一次实际做C/S架构的项目,其中遇到很多问题。这个问题使我记忆深刻,当时在谷歌中搜索了好久都没找到想要的答案,用的就是文章标题中的原话。然后又换成“WinForm中子窗体调用父窗体的控件和事件的方法”,搜到的还是不太多。但我发现原来这个可以用委托与事件来解决(说来惭愧,后来问了一个同学,她说这个以前老师讲过,好吧,我承认上学时划水了哭)。

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

    先讲第一种方法,直接将整个窗体作为参数传给另一个窗体。

    这是Form1中的代码:

     public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
            }
    
            //第一种方法示例事件
            public void changetext(string s)
            {
                this.textBox1.Text = s;
            }
    
            //第一种方法
            private void button1_Click(object sender, EventArgs e)
            {
                //将整个窗体作为值传给Form2
                var frm2 = new Form2(this);
                frm2.ShowDialog();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
       }

    这是Form2中代码:

    public partial class Form2 : Form
        {
            //这是第一种方法
            private Form1 f1;
            public Form2()
            {
                InitializeComponent();
            }
    
            public Form2(Form1 frm1)
            {
                InitializeComponent();
                f1 = frm1;//将传过来的Form1全部赋值给f1,这样就可以在这边调用Form1了
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
    
            }
    
            private void numericUpDown1_ValueChanged(object sender, EventArgs e)
            {
                //这是第一种方法
                //调用Form1中的changetext事件
                f1.changetext(numericUpDown1.Value.ToString());
            }
            
        }
    第二种方法,使用委托与事件(推荐)

    委托与事件的概念这里就不讲了,如果有兴趣,大家可以去看看张子阳的博客,博客地址

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


    源代码地址

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    javascript 多条件分支结构
    初步认识android四大组件之Broadcast
    Apache Tomcat6之阀学习整理
    用java实现一道c笔试题
    Apache Tomcat6 之连接器学习整理(1)
    iphone常用代码块 HA
    iphone开发UIWebView 的使用 HA
    quickmaps HA
    iphone开发uiscrollview 的使用 HA
    iphone api 使用说明详细 HA
  • 原文地址:https://www.cnblogs.com/QiuJL/p/4524209.html
Copyright © 2020-2023  润新知