C#窗体传值方法总结

窗体传值是在学习窗体应用程序时碰到的一类比较常见的问题,现将窗体传值方法做了一点总结,方法如下:

<1>声明全局变量传值:

在Form1中声明全局变量,如下所示:

1 public static string str = "窗体1的值";

通过Form1的button1_Click事件即可将此全局变量传递给Form2,Form1的全局变量str在Form2中可以直接访问,代码如下所示:

1         private void button1_Click(object sender, EventArgs e)
2         {
3             Form2 frm2 = new Form2();
4             frm2.Show();
5         }
1         private void Form2_Load(object sender, EventArgs e)
2         {
3             this.label1.Text = Form1.str;
4         }

<2>通过构造函数传值:

重载Form2的构造函数,使其能够接受一个来自Form1的参数,重载代码如下所示:

        private string str;
        public Form2(string s)
        {
            InitializeComponent();
            this.str = s;
        }

上面代码中定义的string变量str用来存储从Form1传递进来的参数。

在Form1的button1_Click事件中实例化Form2并给其传递Form1的一个参数,代码如下所示:

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

在Form2的Form2_Load中即可接受这个参数,接受这个参数值的代码如下所示:

        private void Form2_Load(object sender, EventArgs e)
        {
            this.label1.Text = str;
        }

这样,在单击Form1的button1之后,Form2便会蹦出来,Form2的label1便会显示这个从Form1传进来的值。

<3>在窗体中声明公共属性进行传值:

在Form2中声明公共属性,代码如下所示:

        private string username;

        public string Username
        {
            get { return username; }
            set { username = value; }
        }
        private string password;

        public string Password
        {
            get { return password; }
            set { password = value; }
        }

这样,在Form1中即可访问这些属性,也就可以将Form2中这些公共属性的值传递给Form1了,并且也可以从Form1中向Form2的这些公共属性传值。代码如下所示:

(1)Form1向Form2传值:

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Username = "Jack";  //Form1向Form2传值
            frm2.Password = "J1234";       frm2.Show(); 
        }
        private void Form2_Load(object sender, EventArgs e)
        {
            textBox1.Text = username;
            textBox2.Text = password;
        }

(2)Form2向Form1传值:

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            this.Username = textBox1.Text;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            this.Password = textBox1.Text;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Username = "Jack";  //Form1向Form2传值
            frm2.Password = "J1234";
            comboBox1.Items.Add(frm2.Username);  //Form2向Form1传值
            comboBox1.Items.Add(frm2.Password);
            frm2.Show();
        }   

声明公共属性传值比较灵活,受限较少,因此比较好用。但是或许这会影响数据的安全性哦。

<4>传递整个窗体进行传值。

类似于构造函数传值,将窗体作为构造函数的参数即可传递整个窗体了。代码如下所示:

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.Show();
        }   
        Form1 frm1;
        public Form2(Form1 f1)
        {
            InitializeComponent();
            this.frm1 = f1;
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            this.textBox1.Text = frm1.ActiveControl.ToString();
        }

这样能把Form1整个窗体传递给Form2,在Form2里即可操作Form1的数据及其控件了。

<5>更改系统文件:

更改Form1.Designer.cs,譬如要使其控件变为公共可访问的,即找到在此文件中声明的控件,将你需要在Form2里访问的控件的访问修饰符修改为public,如下所示:

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.ComboBox comboBox1;

将上面的代码里需要更改的控件的访问修饰符更改后保存即可。这种方法我个人感觉不好,有违C#语言的封装性和数据的安全性,个人建议不提倡使用。

<6>利用委托进行窗体传值:

这种方法是我在网上看到的,对原代码做了一点点改进,利用定义委托和事件以及构造函数的方法,实现了Form1和Form2互相传值。废话不多说,请看代码:

Form1部分的代码:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            Form2 f2 = new Form2(str);
            f2.Translate += new TranslateEventHandler(f2_Translate);
            f2.ShowDialog();
        }

        void f2_Translate(string value)
        {
            textBox1.Text = value;
            //throw new NotImplementedException();
        }
    }

Form2部分的代码:

    public delegate void TranslateEventHandler(string value);
    public partial class Form2 : Form
    {
        string str;
        public Form2(string s)
        {
            InitializeComponent();
            this.str = s;
        }

        public event TranslateEventHandler Translate;

        private void button1_Click(object sender, EventArgs e)
        {
            Translate(textBox1.Text);
            this.Close();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            this.textBox1.Text = str;
        }
    }

Form1,Form2设计如下图所示:

        

C#窗体传值方法总结

时间: 2024-12-14 16:14:54

C#窗体传值方法总结的相关文章

子窗体和父窗体双向传值——C#窗体传值方法总结

简介 在很多场景下,我们的程序需要完成窗体间的传值功能,有时候是父窗体→子窗体单向传值.子窗体→父窗体传值甚至是,也有时候我们需要父窗体?子窗体双向传值. 在本文中主要介绍一些能够实现双向传值的方法,能够双向传值的方法也能够实现单向传值. 本文的所有源码都可以在GitHub上下载. 本文介绍的方法仅限于我自己知道并且实现过的,我相信还有很多我并不知道的方法,因此也许在很多朋友眼中本文的内容是浅显甚至可笑的,希望路过的各方朋友不吝赐教,我也希望不断地进步! 方法1:Public字段+ShowDia

C#跨窗体传值的几种方法分析第三版

窗体传值是在学习窗体应用程序时碰到的一类比较常见的问题,现将窗体传值方法做了一点总结,方法如下: <1>声明全局变量传值: 在Form1中声明全局变量,如下所示: 1 public static string str = "窗体1的值"; 通过Form1的button1_Click事件即可将此全局变量传递给Form2,Form1的全局变量str在Form2中可以直接访问,代码如下所示: 1 private void button1_Click(object sender,

C# 窗体间传值方法大汇总

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

.Net子窗体给父窗体传值的几种方法

其实方法有很多种,这里只介绍3种,大家如有更好的方法可互相学习学习. 1.子父窗体Owner设定法: Form1: void Button_fm1_Click(object sender, EventArgs e) { Form2 fm2 = new Form2(); fm2.Owner = this;   //将Form2的Owner指针指向Form1 fm2.ShowDialog(); } Form2: void Button_fm2_Click(object sender, EventAr

窗体传值的两种实现方法示例

这两天看前辈的视频初识了窗体传值,于是自己跟着敲了两个Demo,方便以后复习.分享交流. 窗体传值的两种方法:1.通过属性构造方法传值 2.利用委托实现传值. 示例1:点击Form1中的按钮打开From2,点击Form2中的按钮改变窗体Form1的背景颜色. Form1的代码: 1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private void but

C# 窗体间传值方法大汇总(转)

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

c#窗体的传值方法

了解了窗体的显示相关知识,接着总结一下窗体的传值方法:  1.通过构造函数  特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中         int value1; string value2;  public Form2 ( int value1 , string value2 ) {      InitializeComponent ( );      this.value1 = value1;      this.value2 = value2; } 

C# WinForm 父窗体 子窗体 传值

C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值==================1.点击Form1的button1 打开Form2  父窗体给子窗体传值 可以调用重载子窗体的构造函数 直接传入相关数值 public partial class Form1 : Form    {        public Form1()        {   

WinForm开发,窗体显示和窗体传值相关知识总结

以前对WinForm窗体显示和窗体间传值了解不是很清楚最近做了一些WinForm开发,把用到的相关知识整理如下 A.WinForm中窗体显示显示窗体可以有以下2种方法:Form.ShowDialog方法 (窗体显示为模式窗体)Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如下:1.在调用Form.Show方法后,Show方法后面的代码会立即执行2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码3.当窗体显示为模式窗体时,单击"关闭"