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 ...
随机推荐
- python request 请求https verify=False时warning
import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.pac ...
- ensureCapacity增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
扩容原则: 若参数值大于底层数组长度的1.5倍,则数组的长度就扩容为这个参数值:若小于底层数组长度的1.5倍,则数组长度就扩容为底层数组长度的1.5倍. ensureCapacity提高效率 fina ...
- 算法之Python实现 - 000
Python的火热已极,几乎人人在学Python,为了节约时间,也为了实现Python的代码量,计划从今天开始,将<算法与数据结构题目最优解>一书中的代码全部用Python实现.
- 缓存:前端页面缓存、服务器缓存(依赖SQL)MVC3
缓存依赖数据库 第一步 1通过vs里面带的命令提示窗口. 2或者.NET Framework 版本 4(64 位系统)条件,%windir%\Microsoft.NET\Framework64\v4. ...
- 一个box四周边框阴影
实现效果如图: 代码如下: .section { margin: 20upx 30upx; padding: 40upx; border-radius: 6px; border-top: #0670C ...
- css第三天
三 1.标准模式与怪异模式(针对盒子模型)与边框,填充,边界,有关 标准模式(默认):元素的总宽度 = 盒子的宽度 + 左右填充宽度 + 左右边框宽度元素的总高度 = 盒子的高度 + 上下填充高度 + ...
- rsync镜像命令
rsync -e 'ssh -p 19809' -av wwwroot root@3.3.3.3:/home/download/ 参数详解 编辑 -v, --verbose 详细模式输出 -q, -- ...
- Selenium+Java的TestNG测试报告优化
本博主很懒,但学习很勤快,一般能从博客园直接转载的东西,本博主绝不动手写,无奈Selenium+java生成的测试报告在百度上搜索..反正我是没有看到.后来才知道TestNG它可以自动生成测试报告,但 ...
- Error merging: refusing to merge unrelated histories
解决方案: git pull git pull origin master git pull origin master --allow-unrelated-histories idea提交git提交 ...
- UBuntu16.04 安装docker
1.首先更新apt-get源,sudo apt-get update 2.再通过pip安装docker-compose 3.然后再安装docker.io,sudo apt install docker ...