您的位置:首页 > 编程语言 > C#

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;//声明事件并赋予事件执行方法“”的位置不对 所以导致程序错误,之所以记录下来就是为了引以为戒吧,虽然现在很困不知道顺序该怎么排,估计以后用到时候看到此文会有深刻理解并且有所升华。

.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: