C# 窗体间传值

Winform  窗体间传值可分为三种:父窗体给子窗体传值,子窗体给父窗体传值,父子窗体共用变量。

一、父窗体给子窗体传值

1、实例化窗体的时候传值

比如在 Form1 里实例化一个 Form2,实例化的时候直接将数值传到 Form2Form2 重载一个构造函数接收一下即可:

这种做法适用于需要弹出一个类似消息界面之类的情况,传递数据的数据类型可以自定义,整形、字符串、数据、结构体等都可以。但是只能传递一次消息过去。

2、实例化窗体后修改新窗体的 public 字段,把值 “ 传 ” 进去:

虽然 Form2 中 str 字段初始值为 “ 提莫 ” ,但是我们在 f2 显示之前,更新了 str 的值,所以显示的是 “ 阿卡丽 ”。

如果把 “ f2.str = “阿卡丽”; ” 挪到 “ f2.Show(); ” 后面,那就显示的是 “ 提莫 ”。

3、使用 static 关键字,让 Form2 加载的时候去访问 Form1static 字段:

效果和方法 1、2 一样,很显然这样做的话 Form2Form1 得在同一个命名空间里,不然 Form2 访问不到 Form1 里的字段。

二、子窗体给父窗体传值

1、通过 Owner 设置窗口归属来传值,如下所示,点击 Form2 中的按钮,把 Form1 中的 “ 阿卡丽 ” 修改为 “ 提莫 ” :

三、父子窗体共用一个变量

1、多个窗体继承自同一个类,这个方法可以使窗体之间在代码里随时访问公共变量。

做法就是先创建一个窗体,继承自 Form,做为母窗体,在里面声明一个公共的静态变量,注意,一定要是静态变量。如下所示,项目中添加一个 MU.cs 继承自 Form,然后新建 Form1Form2,继承 MU

然后无论是在 Form1 里,还是 Form2 里,都可以随时访问公共静态变量 str,我们给 Form1Form2 各添加一个 timer 控件,定时访问 str 的值,并更新在自己的窗体里。效果如下所示,无论在哪个窗体里修改了 str 的值,另一个窗体都会自动更新上去:

上面这个操作只是举例演示多窗体共用变量的方法,实际应用的时候不能这么直接,因为要考虑到线程冲突吖!

对于公共变量该加锁的加锁,该用无锁队列的用无锁队列。

发表评论

Powered by WordPress | Theme Revised from Doo

苏ICP备18047621号

Copyright © 2017-2024 追光者博客