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

<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设计如下图所示:

        

转载于:https://www.cnblogs.com/sylsy/p/7766888.html

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

  1. 总结:C#中跨窗体传值的几种方法

    C#中跨窗体传值的几种方法分析(很详细) (1)父窗口给子窗口传值 (2)子窗口给父窗口传值 (3)父子窗口之间互相传值 文章链接:https://www.cnblogs.com/xh6300/p/6 ...

  2. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】...

    页面传值--最佳答案6种方式: 一. 使用QueryString变量 QueryString是一种非常简单也是使用比较多的一种传值方式,但是它将传递的值显示在浏览器的地址栏中,如果是传递一个或多个安全 ...

  3. java多线程传值覆盖_Java 多线程传值的四种方法

    其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数据 3:通过回调函数传递数据 那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图: 动态Cron4 ...

  4. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  5. java线程异步传值_Java 多线程传值的四种方法

    Java 多线程传值的四种方法 作者: sunjs 更新时间:2020-09-11 15:20:16 原文链接 其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数 ...

  6. 【ajax】前端ajax传值的几种方法

    前端ajax传值的几种方法 注意事项 1.传值格式 2.ajax在sucecess后继续执行代码 3.传值方式 传图片文件到后端 正常传 本博文仅为记录项目过程中遇到的熟练代码 注意事项 1.传值格式 ...

  7. vue组件之间的传值的几种方法

    vue组件之间传值的几种方法总结 一.父传子 父传子技术就是把父组件中的数据传给子元素调用,用到的方法是 1.在父组件的子组件标签上绑定一个属性,挂载要传输的变量 ,语法是 :属性名 (冒号加属性名) ...

  8. Vue组件之间传值的几种方法 (直接上代码)

    vue组件之间传值的几种方法总结 一. props(父传子) 父组件 传递 <template><div><HelloWorld :msg="msg" ...

  9. php 解析java map,java_java遍历Map的几种方法分析,本文实例分析了java遍历Map的几 - phpStudy...

    java遍历Map的几种方法分析 本文实例分析了java遍历Map的几种方法.分享给大家供大家参考,具体如下: Java代码: Map map=new HashMap(); map.put(" ...

最新文章

  1. js query复习
  2. ATO/MTO类机械制造业特点以及ERP需求分析(三)
  3. 【转】jmeter学习笔记——JDBC测试计划-连接Mysql
  4. MQTT进阶:web端远程控制LED灯
  5. python循环怎么跳过开始循环,如果循环内部调用的函数执行时间太长,你怎么能跳过python中的循环迭代?...
  6. 【软考】程序设计语言复习指南
  7. Leetcode 338.比特位计数
  8. keras 多GPU训练,单GPU权重保存和预测
  9. UGUI的Drag实现鼠标拖拽
  10. 这个开源的视频编辑项目,有点6~
  11. 华为盒子 原生android,华为悦盒/各种安卓盒子找回原生设置以及适配蓝牙遥控器...
  12. 星环大数据助银行数据仓库全面升级
  13. thinkphp5.1生成错误日志文件以及Evn的使用
  14. 组合体视图的画图步骤_组合体三视图的画法
  15. 怎么定位html的坐标,css怎么定位图片的位置?
  16. navicat的基本使用技巧
  17. 随感——冬天走了、微软社区精英会议
  18. Powershell免杀系列(二)
  19. JAVA基础班入学考试试卷
  20. 2021-2022 ACM-ICPC Brazil Subregional Programming Contest N. No Luck

热门文章

  1. Selenium +Java自动化环境安装
  2. 函数式编程 读书笔记
  3. Fireworks层与蒙版的概念和用法
  4. java内存管理总结
  5. python获取html文本框内容_Python3处理HTML获取所需内容
  6. MetadataCache分析
  7. (73)FPGA面试题-Verilog实现5人表决器
  8. (12)Zynq CAN控制器介绍
  9. 蓝桥杯单片机:12届省赛
  10. windows 使用qtcreater编译boost 测试