C#委托与事件的一点理解(3)
2017-01-04 13:57
399 查看
C#委托与事件的一点理解(3)
最近在做一个电力系统电子操作票的小项目,涉及新建工作票操作,具体内容就是在打开的新建操作票窗口中配置要新建的内容,点击该窗口中的完成按钮,关闭该窗口并且更新主窗口中的刚刚配置的内容。新建窗口中点击完成–>触发事件–>更新主窗口内容
思路:
在新建窗口中:
- 1、声明代理、代理事件;
- 2、在完成按钮单击事件调用事件;
在主窗口中:
- 1、实例化新窗口类;
- 2、调用新窗口实例的事件,并通过Tab快捷键生成事件存根(具体事件发生执行的方法);
代码块
新建窗口代码:sing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using DevExpress.Xpf.Core; using System.Reflection; namespace DXWPFApplication2 { /// <summary> /// Interaction logic for NewTask.xaml /// </summary> public partial class Win_NewTask : DXWindow { public delegate void AddYulanHander(string taskName);//声明代理 public event AddYulanHander AddYulanEvent ;//声明代理方法 public Win_NewTask() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { // try { AddYulanEvent("a");//执行代理方法 并传入参数(新建票的自命名) } catch (Exception ee) { MessageBox.Show(ee.ToString()); } this.Close(); } //private void Button_Click_1(object sender, RoutedEventArgs e) //{ //} // public string taskName; } }
主窗口代码:
。。。。。。。。 // 新建按钮事件 private void barButtonItem1_ItemClick(object sender, ItemClickEventArgs e) { // newTask newTask1 = new DXWPFApplication2.newTask(); // newTask1.ShowDialog(); Win_NewTask newTask = new Win_NewTask(); newTask.AddYulanEvent += newTask_AddYulanEvent;//声明事件并赋予事件执行方法 newTask.ShowDialog(); //GridControl newGrid = new GridControl(); //newGrid.Name = "newGrid_Auto"; //InitDocument_Grid(newGrid); //documentPanel1.Content = newGrid; } //自动生成的事件方法 void newTask_AddYulanEvent(string taskName) { GridControl newGrid = new GridControl(); newGrid.Name = "newGrid_Auto"; InitDocument_Grid(newGrid); documentPanel1.Content = newGrid; l1.Content = taskName; M_Task task1 = new M_Task(); // task1.taskName = newTask.taskName.Text; taskList.Add(task1); // throw new NotImplementedException(); } 。。。。。。。。
PS
这次理解的重点是顺序,从声明事件、调用事件、事件执行方法一定有这个先后顺序。虽然这个看似简单,但本人在使用中确实犯了错误,因为 “”newTask.AddYulanEvent += newTask_AddYulanEvent;//声明事件并赋予事件执行方法“”的位置不对 所以导致程序错误,之所以记录下来就是为了引以为戒吧,虽然现在很困不知道顺序该怎么排,估计以后用到时候看到此文会有深刻理解并且有所升华。.
相关文章推荐
- 转:检查c#代码内存泄露工具-CLR Profiler工具使用
- 从0自学C#13--子类和父类方法的锁对象问题
- C# 表达式树Expression Trees的知识梳理
- C# DataTable导出成excel
- C#利用反射机制创建对象
- 【转】C#使用ESC指令控制POS打印机打印小票
- c# datagridview 中DataSource的使用总结
- C#学习常用命名空间【3000】---System.IO
- C# 匿名方法基础回顾
- C# 获取屏幕的大小
- 【强烈推荐】开源C#工具类MSCL系列(七)Date时间日期帮助类
- C#中的combobox里DropDownStyle
- C# Post提交
- C#中string.format用法详解
- C#中窗口在屏幕中居中
- C#检验参数合法性公用方法
- C#中ToString()格式详解
- C#设计模式(1)——单例模式
- Project Euler 09 找出 2百万 以内的质数和
- 【强烈推荐】开源C#工具类MSCL系列(六)Session帮助类