Winform开发之窗体传值
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开发之窗体传值的更多相关文章
- C# WinForm开发 取消窗体关闭按钮
//禁用窗体的关闭按钮 private const int CP_NOCLOSE_BUTTON = 0x200; protected override CreateParams CreateParam ...
- Winform开发之窗体显示、关闭与资源释放
Winform的窗体涉及到一般窗体(单文档窗体).MDI窗体.窗体之间的关系等,那么如果调用打开新窗体.如何关闭窗体.窗体资源的释放等都关系到软件运行的效率,本文一一介绍 1.窗体的显示 从一个窗体打 ...
- C# Winform中的窗体传值
关于C#winform窗体之间的传值有以下几种做法 1 通过构造函数传值 2 属性传值 以上两种方法不早详细介绍. 3 通过事件传值,委托传值 首先看一下通过委托传值吧. 1,创建两个窗体,分别是Fo ...
- Winform开发入门集中培训系列文章
最近有个培训,写PPT不如写博客了,共享是程序猿的职业情操吧,因此,本人准备写一个Winform开发的系列文章,对于初级开发者来说,应该比较有用,写作当中不免错误或不成熟的地方,看到的朋友请留言指出, ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
- .NET开发之窗体间的传值转化操作
DOTNET开发之窗体间的传值转化操作 好想把自己最近学到的知识写下来和各位朋友分享,也希望得到大神的指点.今天终于知道自己要写点什么,就是关于WPF开发时简单的界面传值与简单操作. 涉及两个界面:一 ...
- winform两个窗体之间传值(C#委托事件实现)
委托 定义一个委托,声明一个委托变量,然后让变量去做方法应该做的事. 委托是一个类型 事件是委托变量实现的 经典例子:两个winform窗体传值 定义两个窗体:form1和form2 form1上有一 ...
- C# WinForm 父窗体 子窗体 传值
C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值= ...
- C# Winform 窗体传值 利用委托 子窗体传值给父窗体
常用的Winform窗体传值有两种方式. 1.更改Form.designer.cs文件,将控件的设为Public,供子窗体访问. 在designer.cs文件的最后,找到你的控件声明. private ...
随机推荐
- iOS横竖屏
现在开发的APP大部分界面是竖屏的,只有视频播放的界面和webview阅读文字的界面是可以横屏操作的. 那么就进行如下处理: 1.首先确保APP支持横屏旋转 2.我的App里面都是走UINavigat ...
- angularjs directive 实例 详解
前面提到了angularjs的factory,service,provider,这个可以理解成php的model,这种model是不带html的,今天所说的directive,也可以理解成php的mo ...
- css3绘制几何图形
用css3绘制你需要的几何图形 1.圆形 示例: 思路:给任何正方形元素设置一个足够大的 border-radius ,就可以把它变成一个圆形.代码如下: html: <div class=&q ...
- Nutshell.ThreadWorkerPool .Net线程池设计
功能描述: 支持创建多个线程池,并统一管理 支持不同线程池的容量控制,以及最少活动线程的设置 支持不同线程池中活动线程的闲时设置,即线程空闲时间到期后即自动被回收 结构设计: ThreadWorker ...
- apache服务器参数设置
全局参数设置 ServerRoot:服务器根目录 apache安装目录[我的为:/usr/local/apache/] 用于指定apache服务器的配置文件及日志文件存放的根目录.服务器的基础目录,a ...
- 《Programming WPF》翻译 第9章 2.选择一个基类
原文:<Programming WPF>翻译 第9章 2.选择一个基类 WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生.图9-1显示了一组可能作为类--可能是合适的基类, ...
- 《Programming WPF》翻译 第7章 3.笔刷和钢笔
原文:<Programming WPF>翻译 第7章 3.笔刷和钢笔 为了在屏幕上绘制一个图形,WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框.WPF提供了一些Brush类型支 ...
- CMD获取当前目录的绝对路径 (转)
@echo offecho 当前盘符:%~d0echo 当前盘符和路径:%~dp0echo 当前批处理全路径:%~f0echo 当前盘符和路径的短文件名格式:%~sdp0echo 当前CMD默认目录: ...
- java实现文件编码监测(转)
chardet是mozilla自动字符集探测算法代码的java移植.这个算法的最初作者是frank Tang,C++源代码在http://lxr.mozilla.org/mozilla/source/ ...
- visual studio 中GIT的用法
http://msdn.microsoft.com/zh-cn/library/vstudio/hh850445 Git 使用最新版:Git-1.8.4-preview20130916http: ...