Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法

1、构造函数传值,但这种方法是单向的(推荐)

上代码,先传值

 private void button2_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3("要传的值啊");
fr3.ShowDialog();
}

接值,对了,这里需要重载一个Form3的构造函数,然后将拿到的值显示出来

 public Form3(string canshu)
{
InitializeComponent();
label1.Text = canshu;
}

效果图,就是这么简单

2、静态变量传值(不推荐)

可以将静态变量申明在你需要的地方,比如一个单独类,或者Form中,比如我们在这里申明在Form2中

 public static string xvalue;
 private void button2_Click(object sender, EventArgs e)
{
xvalue = "要传的值啊xvalue";
Form3 fr3 = new Form3();
fr3.ShowDialog();
}

先给赋值,然后在Form3中取值

 public Form3()
{
InitializeComponent();
label1.Text = Form2.xvalue;//Form2实际也是个class,直接取静态值即可,如果静态变量xvalue定义在其他类中,即将Form2替换即可
}

效果图上

3、通过共有属性传值

首先在要打开的Form中创建一个共有属性,然后在调用窗口赋值即可。比如下面Form2启动Form3,即给Form3的yvalue传值

(1)在Form3中定义共有属性

 public string yvalue {
get
{
return label1.Text.ToString();
}
set
{
label1.Text = value;
}
}

(2)Form2中启动Form3,并传值

 private void button2_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
fr3.yvalue = "要传的值啊";
fr3.ShowDialog();
}

4、通过Owner属性传值

(1)在调用者Form2中申明一个公有变量,并赋值,设置需要启动的Form3的Owner

 public string xvalue;
private void button2_Click(object sender, EventArgs e)
{
xvalue = "Form2要传的值";
Form3 fr3 = new Form3();
fr3.Owner = this;
fr3.ShowDialog();
}

(2)启动窗体Form3中取值

 private void Form3_Load(object sender, EventArgs e)
{
Form2 fr2 = (Form2)this.Owner;
label1.Text = fr2.xvalue;
}

这种方法实际是将Form2传给了Form3,因此Form3可以取到Form2的所有公有变量和属性。

5、委托传值(推荐)

委托传值主要用在子窗体给父窗体传值上,即上文的Form3给Form2传值

(1)先在Form3中申明委托

 public delegate void PutHandler(string text);
public PutHandler putTextHandler;//委托对象
private void button1_Click(object sender, EventArgs e)
{
if (putTextHandler != null)
{
putTextHandler(textBox1.Text.ToString());
}
}

(2)在Form2中绑定委托事件

 public void getValue(string strV)
{
this.textBox1.Text = strV;
} private void button1_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
fr3.putTextHandler = getValue;
fr3.ShowDialog();
}

注意:

委托和事件是不一样的,你最后一个示例。
if (putTextHandler != null)
{
putTextHandler(textBox1.Text.ToString());
}
上面这样做是有bug的。
最好的做法是,是先用临时变量缓存putTextHandler ;
然后在处理,
否则你判断!=null成立
但是马上在其他地方-=的话,程序就出错了
-=你是不知道会由谁调用的

Winform开发之窗体传值的更多相关文章

  1. C# WinForm开发 取消窗体关闭按钮

    //禁用窗体的关闭按钮 private const int CP_NOCLOSE_BUTTON = 0x200; protected override CreateParams CreateParam ...

  2. Winform开发之窗体显示、关闭与资源释放

    Winform的窗体涉及到一般窗体(单文档窗体).MDI窗体.窗体之间的关系等,那么如果调用打开新窗体.如何关闭窗体.窗体资源的释放等都关系到软件运行的效率,本文一一介绍 1.窗体的显示 从一个窗体打 ...

  3. C# Winform中的窗体传值

    关于C#winform窗体之间的传值有以下几种做法 1 通过构造函数传值 2 属性传值 以上两种方法不早详细介绍. 3 通过事件传值,委托传值 首先看一下通过委托传值吧. 1,创建两个窗体,分别是Fo ...

  4. Winform开发入门集中培训系列文章

    最近有个培训,写PPT不如写博客了,共享是程序猿的职业情操吧,因此,本人准备写一个Winform开发的系列文章,对于初级开发者来说,应该比较有用,写作当中不免错误或不成熟的地方,看到的朋友请留言指出, ...

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

    主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...

  6. .NET开发之窗体间的传值转化操作

    DOTNET开发之窗体间的传值转化操作 好想把自己最近学到的知识写下来和各位朋友分享,也希望得到大神的指点.今天终于知道自己要写点什么,就是关于WPF开发时简单的界面传值与简单操作. 涉及两个界面:一 ...

  7. winform两个窗体之间传值(C#委托事件实现)

    委托 定义一个委托,声明一个委托变量,然后让变量去做方法应该做的事. 委托是一个类型 事件是委托变量实现的 经典例子:两个winform窗体传值 定义两个窗体:form1和form2 form1上有一 ...

  8. C# WinForm 父窗体 子窗体 传值

    C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值= ...

  9. C# Winform 窗体传值 利用委托 子窗体传值给父窗体

    常用的Winform窗体传值有两种方式. 1.更改Form.designer.cs文件,将控件的设为Public,供子窗体访问. 在designer.cs文件的最后,找到你的控件声明. private ...

随机推荐

  1. iOS横竖屏

    现在开发的APP大部分界面是竖屏的,只有视频播放的界面和webview阅读文字的界面是可以横屏操作的. 那么就进行如下处理: 1.首先确保APP支持横屏旋转 2.我的App里面都是走UINavigat ...

  2. angularjs directive 实例 详解

    前面提到了angularjs的factory,service,provider,这个可以理解成php的model,这种model是不带html的,今天所说的directive,也可以理解成php的mo ...

  3. css3绘制几何图形

    用css3绘制你需要的几何图形 1.圆形 示例: 思路:给任何正方形元素设置一个足够大的 border-radius ,就可以把它变成一个圆形.代码如下: html: <div class=&q ...

  4. Nutshell.ThreadWorkerPool .Net线程池设计

    功能描述: 支持创建多个线程池,并统一管理 支持不同线程池的容量控制,以及最少活动线程的设置 支持不同线程池中活动线程的闲时设置,即线程空闲时间到期后即自动被回收 结构设计: ThreadWorker ...

  5. apache服务器参数设置

    全局参数设置 ServerRoot:服务器根目录 apache安装目录[我的为:/usr/local/apache/] 用于指定apache服务器的配置文件及日志文件存放的根目录.服务器的基础目录,a ...

  6. 《Programming WPF》翻译 第9章 2.选择一个基类

    原文:<Programming WPF>翻译 第9章 2.选择一个基类 WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生.图9-1显示了一组可能作为类--可能是合适的基类, ...

  7. 《Programming WPF》翻译 第7章 3.笔刷和钢笔

    原文:<Programming WPF>翻译 第7章 3.笔刷和钢笔 为了在屏幕上绘制一个图形,WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框.WPF提供了一些Brush类型支 ...

  8. CMD获取当前目录的绝对路径 (转)

    @echo offecho 当前盘符:%~d0echo 当前盘符和路径:%~dp0echo 当前批处理全路径:%~f0echo 当前盘符和路径的短文件名格式:%~sdp0echo 当前CMD默认目录: ...

  9. java实现文件编码监测(转)

    chardet是mozilla自动字符集探测算法代码的java移植.这个算法的最初作者是frank Tang,C++源代码在http://lxr.mozilla.org/mozilla/source/ ...

  10. visual studio 中GIT的用法

    http://msdn.microsoft.com/zh-cn/library/vstudio/hh850445    Git 使用最新版:Git-1.8.4-preview20130916http: ...