zoukankan      html  css  js  c++  java
  • C# 子窗体与父窗体之间几种传值的方式

    做了很多项目,很多项目都用到子父窗体之间的传值。。

    父窗体传入子窗体都比较简单,而子窗体传入父窗体因为有很多不通道的需求,所以·搞起来有点头大。

    先说父窗体传入子窗体:

    将父窗体控件上的值传入子窗体的控件上:

    Form1为父窗体

    Form2为子窗体

    Form1 单击按钮打开Form2,Form2关闭的时候把值传到Form1的控件上

    代码:

     
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Drawing;  
    6. using System.Linq;  
    7. using System.Text;  
    8. using System.Threading.Tasks;  
    9. using System.Windows.Forms;  
    10.   
    11. namespace WindowsFormsApplication3  
    12. {  
    13.     public partial class Form1 : Form  
    14.     {  
    15.         public Form1()  
    16.         {  
    17.             InitializeComponent();  
    18.         }  
    19.   
    20.         private void button1_Click(object sender, EventArgs e)  
    21.         {  
    22.             Form2 f2 = new Form2(this.textBox1.Text);  
    23.             if (f2.ShowDialog() == DialogResult.OK)  
    24.             {  
    25.                 this.textBox1.Text = f2.TextBoxValue;  
    26.                 f2.Close();  
    27.             }  
    28.   
    29.         }  
    30.   
    31.     }  
    32. }  
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2(this.textBox1.Text);
                if (f2.ShowDialog() == DialogResult.OK)
                {
                    this.textBox1.Text = f2.TextBoxValue;
                    f2.Close();
                }
    
            }
    
        }
    }
    

    Form2的代码:

     
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Drawing;  
    6. using System.Linq;  
    7. using System.Text;  
    8. using System.Threading.Tasks;  
    9. using System.Windows.Forms;  
    10.   
    11. namespace WindowsFormsApplication3  
    12. {  
    13.     public partial class Form2 : Form  
    14.     {  
    15.         public Form2():this(null)  
    16.         {  
    17.               
    18.         }  
    19.   
    20.         public string TextBoxValue  
    21.         {  
    22.             get { return textBox1.Text; }  
    23.             set { textBox1.Text = value; }  
    24.         }  
    25.   
    26.         public Form2(string value) {  
    27.             InitializeComponent();  
    28.             TextBoxValue = value;  
    29.         }  
    30.   
    31.         private void button1_Click(object sender, EventArgs e)  
    32.         {  
    33.             this.DialogResult = DialogResult.OK;  
    34.         }  
    35.          
    36.     }  
    37. }  
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication3
    {
        public partial class Form2 : Form
        {
            public Form2():this(null)
            {
                
            }
    
            public string TextBoxValue
            {
                get { return textBox1.Text; }
                set { textBox1.Text = value; }
            }
    
            public Form2(string value) {
                InitializeComponent();
                TextBoxValue = value;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.OK;
            }
           
        }
    }
    


    这是传值方式是最基本,租常见的一种,还有一种方式,就是打开子窗体Form2后,在往Form2上的控件上输入值的时候,Form1上的控件上的值也跟着变化,

    对于这种情况,问你就需要使用 事件委托来完成。

    ----------------------------------------------------------快乐的分割线-------------------------------------------------------------

    Form1代码:

     
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Drawing;  
    6. using System.Linq;  
    7. using System.Text;  
    8. using System.Threading.Tasks;  
    9. using System.Windows.Forms;  
    10.   
    11. namespace WindowsFormsApplication3  
    12. {  
    13.     public partial class Form1 : Form  
    14.     {  
    15.         public Form1()  
    16.         {  
    17.             InitializeComponent();  
    18.         }  
    19.           
    20.         private void button2_Click(object sender, EventArgs e)  
    21.         {  
    22.             Form2 f2 = new Form2();  
    23.             f2.TextBoxChanged += new EventHandler(  
    24.                 (sender1, e1) =>  
    25.                 { textBox2.Text = f2.TextBoxValue; }  
    26.             );  
    27.             f2.FormClosed += new FormClosedEventHandler(  
    28.                 (sender2, e2) => { f2 = null; }  
    29.             );  
    30.             f2.Show(this);  
    31.         }  
    32.     }  
    33. }  
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            
            private void button2_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.TextBoxChanged += new EventHandler(
                    (sender1, e1) =>
                    { textBox2.Text = f2.TextBoxValue; }
                );
                f2.FormClosed += new FormClosedEventHandler(
                    (sender2, e2) => { f2 = null; }
                );
                f2.Show(this);
            }
        }
    }
    

    Form2代码:

     
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Drawing;  
    6. using System.Linq;  
    7. using System.Text;  
    8. using System.Threading.Tasks;  
    9. using System.Windows.Forms;  
    10.   
    11. namespace WindowsFormsApplication3  
    12. {  
    13.     public partial class Form2 : Form  
    14.     {  
    15.         public Form2():this(null)  
    16.         {  
    17.               
    18.         }  
    19.   
    20.         public string TextBoxValue  
    21.         {  
    22.             get { return textBox1.Text; }  
    23.             set { textBox1.Text = value; }  
    24.         }  
    25.   
    26.         public event EventHandler TextBoxChanged;  
    27.   
    28.         public Form2(string value) {  
    29.             InitializeComponent();  
    30.             TextBoxValue = value;  
    31.         }  
    32.   
    33.         private void button1_Click(object sender, EventArgs e)  
    34.         {  
    35.             this.DialogResult = DialogResult.OK;  
    36.         }  
    37.   
    38.         private void textBox1_TextChanged(object sender, EventArgs e)  
    39.         {  
    40.             if (TextBoxChanged != null)  
    41.             {  
    42.                 TextBoxChanged(this, e);  
    43.             }  
    44.         }  
    45.     }  
    46. }  
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication3
    {
        public partial class Form2 : Form
        {
            public Form2():this(null)
            {
                
            }
    
            public string TextBoxValue
            {
                get { return textBox1.Text; }
                set { textBox1.Text = value; }
            }
    
            public event EventHandler TextBoxChanged;
    
            public Form2(string value) {
                InitializeComponent();
                TextBoxValue = value;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.OK;
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (TextBoxChanged != null)
                {
                    TextBoxChanged(this, e);
                }
            }
        }
    }
    

    这里需要使用 TextBox的TextChanged事件。

    上面就是两种子窗体传入父窗体值的方法。

  • 相关阅读:
    Vue 全局过滤器和局部过滤器使用方式
    Vue 标签显示/隐藏的方式对比demo
    OpenSSL SSL_read: Connection was reset, errno 10054
    Vue 自定义全局指令和局部指令demo
    Vue 列表渲染demo
    Vue Class样式和style样式编写
    vue中的函数(methods),计算属性(computed),监听器(watch)的区别demo
    Vue 常用指令
    针对 WebSocket 协议的 Locust 压测脚本实现(基于 Locust 1.0 以上版本)
    Locust 脚本开发入门(4)
  • 原文地址:https://www.cnblogs.com/fan-xiaofan/p/6093718.html
Copyright © 2011-2022 走看看