WinForm 参数传递

http://www.cnblogs.com/xinjian/archive/2011/09/15/2177851.html

本人刚刚接触Winform ,学习之后分享下心得。

 winform 窗体与窗体之间参数的传递常规的有两种

1.构造函数传参。即重载第二个窗体的构造函数,把需要传的参数写入第二个窗体的构造函数。代码如下:

  Form1:

        private void button1_Click(object sender, EventArgs e)         {             string txt = this.textBox1.Text;             Form2 frm = new Form2(txt);//带入构造函数             frm.Show();         }

  Form2:

  

    public partial class Form2 : Form     {         private string TxtVal = null;//上一窗体带过来的值         public Form2(string txt) //重载构造函数         {             this.TxtVal = txt;//获取传过来的值             InitializeComponent();            //显示,用于测试             ShowPara();         }        public Form2()         {             InitializeComponent();         }        public void ShowPara()         {             this.label1.Text = this.TxtVal;         }     }

  

2. 全局变量传参数。即 第二个窗体通过获取第一个窗体的全局变量的值。来达到传参的目的。代码如下:

Form1:

 public static string TxtVal = "";//公共的静态变量。可以不示例就访问。         private void button2_Click(object sender, EventArgs e)         {             TxtVal = this.textBox1.Text;             Form3 frm = new Form3();             frm.Show();         }

Form3:

 public partial class Form3 : Form     {         public Form3()         {             InitializeComponent();             ShowPara();         }        public void ShowPara()         {             this.label1.Text = Form1.TxtVal;         }     }

  

另外。还可以通过事件来传参数。 这种方式的好处是可以使解耦两个form之间的关联。

1.先定义一个中间模块(Observer类库),用来处理两个FORM中关系。

namespace Observer {     /// <summary>     /// 定义一个信息委托     /// </summary>     /// <param name="sender">发布者</param>     /// <param name="msg">发送内容</param>     public delegate void MsgDlg(object sender,object msg);    public class MidModule     {         /// <summary>         /// 消息发送事件         /// </summary>         public static event MsgDlg EventSend;         public static void SendMessage(object sender, object msg)         {             if (EventSend != null)//             {                 EventSend(sender, msg);             }         }     }

2.Form1代码

    public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }        private void button1_Click(object sender, EventArgs e)         {             string txt=this.textBox1.Text;             Form2 frm = new Form2();             frm.Show();            MidModule.SendMessage(this, txt);//发送参数值         }     }

3. Form2代码

    public partial class Form2 : Form     {         public Form2()         {             InitializeComponent();            //订阅了信息发送事件,即接受参数值            MidModule.EventSend+=new MsgDlg(MidModule_EventSend);         }       //接受参数后具体干啥的实现         private void MidModule_EventSend(object sender, object msg)         {             if (sender != null)             {                 this.label1.Text = msg.ToString();             }         }     }

  

这样就很神奇的完成了传参的步骤。

参考:http://topic.csdn.net/u/20100112/12/34f6d852-fd02-474f-bfc4-621c6baa35a8.html

Demo下载

时间: 2024-11-05 12:25:46

WinForm 参数传递的相关文章

C# Winform将控件作为参数传递

最近做个Winform 的程序设计,需要将窗体的控件作为参数传递到另外一个类的函数中去使用,每次都会忘记,简单的记下来,以备即时查看. 1. 设置控件的modifier属性设置为public 2. 以空间名为参数 3. 在需要使用的类中using System.Windows.Forms; 3. 在另外一个类中可以直接声明控件类型的变量列如:TextBox, SaveFileDialog, ListView等控件类型 这样就可以脱离窗体程序,在其他的类中操作窗体的控件属性,同时也方便了窗体和窗体

winForm 程序开发界面参数传递

1. [csharp] view plaincopy 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

在 WinForm 中打开页面采用POST方式传参http。可以多个参数传递,返回json字符串

//调用方法 Dictionary<string, string> postData = new Dictionary<string, string>(); postData.Add("user", "aaa"); postData.Add("pass", "bbb"); GetPageByPost("http://www.xxx.com/send.aspx", postData, 

吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序

原文:吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序 在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的问题,因为使用网页端的打印效果并不是太好,之前也写过关于打印相关的文章可以查阅,我需要使用WinForm客户端来驱动打印,但是我又不想重新开发Winform客户端的所有功能,只要能够使用winform驱动打印即可.我就需要一个类似

Winform调用QQ发信息并且开机启动 (开源)

前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一些编码思路,下面列出编码前思路图 检查QQ安装后在注册表中的具体路径 根据注册表找到调用QQ程序的exe完整路径(Timwp.exe) 启动,达到winform调用QQ的要求 先看简单测试界面 步骤1 找到QQ的注册表路径,经过百度之后分析得到思路,正确的路径 32位QQ安装后注册表路径SOFTWA

在Winform界面中实现对多文档窗体的参数传值

在Winform界面中窗体我们一般使用多文档进行展示,也就是类似一般的选项卡的方式可以加载多个窗体界面.一般来说,我们如果打开新的窗体,给窗体传递参数是很容易的事情,但是在框架层面,一般的窗体是通过动态创建的,一般传入窗体的类型,在多文档集合里面判断,如果存在则激活,如果不存在则创建的方式,所以我们传递参数会碰到一些问题.本文即使介绍如何在这种方式下,给窗体对象传递参数,从而实现相应的数据处理功能. 不管是主体界面中,左侧包含树形列表,还是顶部包含工具栏的情况,都可能涉及打开窗体的时候,传递一些

csharp编写界面,opencv编写类库,解决 Pinvoke过程中的参数传递和平台调用问题

使用csharp 编写winform程序,不仅速度快,而且容易界面美化并找到其他类库的支持:而使用 opencv编写图形图像处理程序,是目前比较流行,而且高效的一种方法.如果需要将两者结合,需要解决的问题就是使用 csharp调用vc 下编写的库文件.两个难点,一个是平台调用的内存控制问题,一个是参数传递问题.关注点在解决实际问题 在现实中,我发现问题比较大的是两点,一点是内存控制问题,一个是平台调用问题. 一.内存控制:(1-6种方法是我验证后失败的方法,关注问题解决者可直接看第7点) 1.验

WinForm多线程编程与Control.Invoke的应用浅谈

在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的方式在WinForm开发中必不可少. 本文介绍在WinForm开发中如何使用多线程,以及在线程中如何通过Control.Invoke方法返回窗体主线程执行相关操作. -. WinForm多线程编程 1. new Thread() 新开一个线程,执行一个方法,没有参数传递 private void DoWork() { Thread

winform跨线程问题

1.invoke是同步线程 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; 9 using System.Threading.Tasks; 10 using