求一个C#事件的写法?

clefoo 2006-12-13 01:29:45
谢谢了 小弟也没什么分了,给个10分,讨个写法?希望得到帮助
...全文
305 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
以下以我正在做的系统管理授权控件为例说明一下

第一步:
定义委托
public delegate void AccreditEventHandler(object sender, AccreditEventArgs e);

如果参数不是默认的参数,当然还需要定义参数类型如AccreditEventArgs ,以便传送你需要的数据


第二步:
定义事件,类型就是委托类型,前面加event关键字

/// <summary>
/// 在选定或取消授权项目及操作时发生。
/// </summary>
public event AccreditEventHandler AccreditAfterCheck;


第三步:
触发事件
//树(授权项) 选中/取消
private void tvwAccreditItems_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
//引发事件
if (AccreditAfterCheck != null)
{
AccreditEventArgs args = new AccreditEventArgs(AccreditActionType.AccreditItem,e.Node.Text,e.Node.Tag,e.Node.Checked);

AccreditAfterCheck(this,args);
}
}
pele007 2006-12-13
  • 打赏
  • 举报
回复
MSDN上面的例子

// EventSample.cs.
//
namespace EventSample
{
using System;
using System.ComponentModel;

// Class that contains the data for
// the alarm event. Derives from System.EventArgs.
//
public class AlarmEventArgs : EventArgs
{
private readonly bool snoozePressed ;
private readonly int nrings;

//Constructor.
//
public AlarmEventArgs(bool snoozePressed, int nrings)
{
this.snoozePressed = snoozePressed;
this.nrings = nrings;
}

// The NumRings property returns the number of rings
// that the alarm clock has sounded when the alarm event
// is generated.
//
public int NumRings
{
get { return nrings;}
}

// The SnoozePressed property indicates whether the snooze
// button is pressed on the alarm when the alarm event is generated.
//
public bool SnoozePressed
{
get {return snoozePressed;}
}

// The AlarmText property that contains the wake-up message.
//
public string AlarmText
{
get
{
if (snoozePressed)
{
return ("Wake Up!!! Snooze time is over.");
}
else
{
return ("Wake Up!");
}
}
}
}

// Delegate declaration.
//
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);

// The Alarm class that raises the alarm event.
//
public class AlarmClock
{
private bool snoozePressed = false;
private int nrings = 0;
private bool stop = false;

// The Stop property indicates whether the
// alarm should be turned off.
//
public bool Stop
{
get {return stop;}
set {stop = value;}
}

// The SnoozePressed property indicates whether the snooze
// button is pressed on the alarm when the alarm event is generated.
//
public bool SnoozePressed
{
get {return snoozePressed;}
set {snoozePressed = value;}
}
// The event member that is of type AlarmEventHandler.
//
public event AlarmEventHandler Alarm;

// The protected OnAlarm method raises the event by invoking
// the delegates. The sender is always this, the current instance
// of the class.
//
protected virtual void OnAlarm(AlarmEventArgs e)
{
AlarmEventHandler handler = Alarm;
if (handler != null)
{
// Invokes the delegates.
handler(this, e);
}
}

// This alarm clock does not have
// a user interface.
// To simulate the alarm mechanism it has a loop
// that raises the alarm event at every iteration
// with a time delay of 300 milliseconds,
// if snooze is not pressed. If snooze is pressed,
// the time delay is 1000 milliseconds.
//
public void Start()
{
for (;;)
{
nrings++;
if (stop)
{
break;
}

else if (snoozePressed)
{
System.Threading.Thread.Sleep(1000);
{
AlarmEventArgs e = new AlarmEventArgs(snoozePressed,
nrings);
OnAlarm(e);
}
}
else
{
System.Threading.Thread.Sleep(300);
AlarmEventArgs e = new AlarmEventArgs(snoozePressed,
nrings);
OnAlarm(e);
}
}
}
}

// The WakeMeUp class has a method AlarmRang that handles the
// alarm event.
//
public class WakeMeUp
{

public void AlarmRang(object sender, AlarmEventArgs e)
{

Console.WriteLine(e.AlarmText +"\n");

if (!(e.SnoozePressed))
{
if (e.NumRings % 10 == 0)
{
Console.WriteLine(" Let alarm ring? Enter Y");
Console.WriteLine(" Press Snooze? Enter N");
Console.WriteLine(" Stop Alarm? Enter Q");
String input = Console.ReadLine();

if (input.Equals("Y") ||input.Equals("y")) return;

else if (input.Equals("N") || input.Equals("n"))
{
((AlarmClock)sender).SnoozePressed = true;
return;
}
else
{
((AlarmClock)sender).Stop = true;
return;
}
}
}
else
{
Console.WriteLine(" Let alarm ring? Enter Y");
Console.WriteLine(" Stop Alarm? Enter Q");
String input = Console.ReadLine();
if (input.Equals("Y") || input.Equals("y")) return;
else
{
((AlarmClock)sender).Stop = true;
return;
}
}
}
}


// The driver class that hooks up the event handling method of
// WakeMeUp to the alarm event of an Alarm object using a delegate.
// In a forms-based application, the driver class is the
// form.
//
public class AlarmDriver
{
public static void Main (string[] args)
{
// Instantiates the event receiver.
WakeMeUp w= new WakeMeUp();

// Instantiates the event source.
AlarmClock clock = new AlarmClock();

// Wires the AlarmRang method to the Alarm event.
clock.Alarm += new AlarmEventHandler(w.AlarmRang);

clock.Start();
}
}
}
wdy9927 2006-12-13
  • 打赏
  • 举报
回复
//问得也太笼统了,看下面的是不是想要的
this.button1.Click += new System.EventHandler(this.button1_Click);


private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show("按钮被按下");
}

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧