C# WPF 通过委托实现多窗口间的传值
在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值。
在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如何传值可以略过这部分)在网络上有很多对于委托的介绍和讲解,经过我的学习和总结加上了一点我自己的理解,我认为委托是一种类似于C语言的指针,但是它指向的是方法而不是变量。如果把委托看作一个变量,那么这个变量里存着的就是你目标方法的地址,调用委托约等于调用你的目标方法。(个人理解欢迎指正交流)
以下正文:
实现窗口间的相互传值,先创建两个窗口,先上代码主窗口代码:
MainWindow.xaml
<Grid>
<TextBox Name="MainWindowTextBox" HorizontalAlignment="Left" Height="" Margin="10,61,0,0" TextWrapping="Wrap" Text="空" VerticalAlignment="Top" Width=""/>
<Button Content="打开新窗口" HorizontalAlignment="Left" Margin="10,130,0,0" VerticalAlignment="Top" Width="" Click="ButtonBase_OnClick"/>
</Grid>
MainWindow.xaml.cs
public void GetValue(string value1, TextBox value2)
{
MainWindowTextBox.Text = value1;
} 6 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Window1 newWindow1 = new Window1();
newWindow1.getTextHandler = GetValue; //将方法赋给委托对象
newWindow1.ShowDialog(); 12 }
效果图如下:

第二个窗口Window1代码:
Window1.xaml
<Grid>
<TextBox Name="Window1TextBox" HorizontalAlignment="Left" Height="" Margin="84,73,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width=""/>
<Button Content="传值" HorizontalAlignment="Left" Margin="84,125,0,0" VerticalAlignment="Top" Width="" Click="ButtonBase_OnClick"/>
</Grid>
Window1.xaml.cs
public delegate void GetTextHandler(string value1, TextBox value2); //声明委托
public GetTextHandler getTextHandler; //委托对象 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
getTextHandler(Window1TextBox.Text, Window1TextBox);
}
效果图:

实现效果当运行程序后,点击打开新窗口按钮后,会打开Window1窗口,在Window1窗口的Textbox中输入内容,点击传值,你所输入的内容就会传到主窗口,通过委托的事件将主窗口中的Textbox控件的内容更改为你传过去的值。效果如下:


现在就已经实现了窗口间传值的操作了。接下来我会简单介绍一下以上代码的实现方法和一些自己的理解,如果不感兴趣或者已经会使用委托进行多窗口间的传值了,后面的部分可以略过。
前台代码在此就先不介绍了哈,在MainWindow.xaml.cs文件中
public void GetValue(string value1, TextBox value2)
此方法即为委托的目标方法,此方法返回值为空,也可以设置其返回值,当使用委托时也会收到目标方法的返回值。再有就是此方法接收两个参数,一个是字符串一个是TextBox,第二个参数倒是没什么实际含义,只是为了说明这里传递的变量可以多个,也可以是其它object类型。
newWindow1.getTextHandler = GetValue; //将方法赋给委托对象
将方法赋给委托对象,可以理解为把他们两个绑定在一起的getTextHandler这个委托对应的目标方法就是GetValue。
在Windo1.xaml.cs中:
public delegate void GetTextHandler(string value1, TextBox value2); //声明委托
public GetTextHandler getTextHandler; //委托对象
delegate是声明委托的关键字,这里的返回值为空,若目标方法是有返回值的,在这里将返回值写成同种类型即可,接收的两个变量类型也要和目标方法一致。
接下来就是定义委托对象,大写的GetTextHandler是委托,而小写的getTextHandler是对象,在使用该委托时候使用的也是小写的getTextHandler使用方法:
getTextHandler(Window1TextBox.Text, Window1TextBox);
行文至尾,委托的使用还有很多,例如:事件订阅,匿名方法,多播委托等等,本文介绍的则是委托的基本使用方法,其他的用法仍在学习当中,欢迎指正交流。
2018.8.30下午三点差五分
C# WPF 通过委托实现多窗口间的传值的更多相关文章
- WPF:事件委托对于不同界面间通信的应用
界面1内设定点击事件,生成Path用事件传出public partial class TemplateWindow : Window { internal delegate v ...
- C# 利用委托事件进行窗体间的传值(新手必看)
引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ...
- C# 利用委托事件进行窗体间的传值(简化)
定义委托 public delegate void SendMessageToChildForms(string s); //定义了一个参数是string ,无返回值的委托,名为 SendMessag ...
- WPF:通过Window.DataContext实现窗口间传值
通过Window.DataContext实现窗口之间的传值,特别是跨窗口控件的联动,具有无可比拟的优势.实现方法如下: 1. MainWindow.xaml,在Window.DataContext中 ...
- WPF如何仿制QQ2013登录窗口的关闭效果
昨天,有位朋友问我,WPF能做出像QQ2013窗口在关闭时那个貌似透明过渡的动画吗?我就歪着脸跟他说:"只有你想不到的,没有WPF做不到的". 他又接着说:"我知道肯定会 ...
- node-webkit 新建实例窗口间通信问题解决办法
终于弄明白这问题了,只要在js文件里加上段代码,就可解决两窗口间通信问题. var str = { username: User.name, userrole: User.role }; var ne ...
- WPF、Windows Forms和Silverlight间的联系和区别(转)
WPF.Windows Forms和Silverlight间的联系和区别http://blog.csdn.net/bitfan/article/details/6128391 .NET Windows ...
- JS方法在iframe父子窗口间的调用
本文向大家简单介绍一下iframe父子窗口间JS方法调用,JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用,希望本文介绍对你有所帮助. if ...
- WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口
目录 WPF的消息机制(一)-让应用程序动起来 WPF的消息机制(二)-WPF内部的5个窗口 (1)隐藏消息窗口 (2)处理激活和关闭的消息的窗口和系统资源通知窗口 (3)用于用户交互的可见窗口 (4 ...
随机推荐
- js基本知识
1.js中的数据类型: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 2.typeof 返回的是字符串,有 ...
- spring boot 入门(一)
转自构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. ...
- mount.cifs permission denied
[root@dev ~]# mount.cifs //192.168.9.155/APP /mnt/APP/ -o user=administrator,pass=dsff#$TTT 在检查帐号密码权 ...
- MySQL慢查询日志相关的文件配置和使用。
MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可 ...
- KeyValuePair 和 Dictionary 的关系和区别
KeyValuePair 和 Dictionary 的关系 1.KeyValuePair a.KeyValuePair 是一个结构体(struct): b.KeyValuePair ...
- 有关于并发中的死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)
最近在看<实战Java高并发程序设计>,发现了之前没有接触过的几个名词. 死锁:之前在接触多线程的时候,接触过死锁的情况.死锁是线程中最糟糕的情况,如下面的图中的四辆车子一样,如果没有一辆 ...
- JQuery+formValidator实现表单验证
<!-- 需求: 用户注册页面要有用户名.密码.确认密码.邮箱 用户名文本框:用户名不能为空,且必须为数字与字母的6到12位的组合 密码框:密码不能为空,最少6位,包括至少1个大写字母,1个小写 ...
- 输入一段字符串,统计其中的数字,字母,空格,其他字符的方法 ----python---
1.以简单的循环分支实现字符统计 str1 = input("输入字符串:") num=0;word=0;space=0;other=0; for i in str1: if i. ...
- white-space:pre-wrap和word-break:break-all;
最近碰到了两个css属性,在此记录一下: 1.white-space :nomal规定文本中的文字空格和换行的情况 normal:默认.空白会被浏览器忽略. pre:空白会被浏览器保留.其行为方式类似 ...
- C# 读取TXT文本数据 添加到数据库
protected void Button1_Click(object sender, EventArgs e) { //使用FileStream读取文件 FileStream fileStream ...