!!!请教C#中事件触发问题???

BruceZhang 2002-05-15 09:04:03
现在我已经写好的一个事件,如何让某一个方法响应这一事件呢?
比如我写了一个事件,如何让TextBox控件进行输入时响应这一事件呢?
还有,能不能举个详尽的例子,这里不胜感激!并赠高分!
...全文
76 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamsoloist 2002-05-15
  • 打赏
  • 举报
回复
谢谢大家!!!我明白了,我想也许是为了性能才这样做吧!
开心就好 2002-05-15
  • 打赏
  • 举报
回复
这是一个更完整的:
using System;
using System.Windows.Forms;
namespace testform
{
/// <summary>
/// Event source
/// </summary>
public class Bird
{
public Bird()
{
}
public void Flying()
{
this.OnBirdEvent(BirdStatus.Flying);
}
public void Dead()
{
this.OnBirdEvent(BirdStatus.Dead);

}
public void Sleep()
{
this.OnBirdEvent(BirdStatus.Sleeping);
}
private void OnBirdEvent(BirdStatus s)
{
if(this.BirdEvent!=null)
{
this.BirdEvent(this,new BirdEventArgs(s));
}
}
public event BirdEventHandler BirdEvent;
}
public delegate void BirdEventHandler(object sender,BirdEventArgs e);
public class BirdEventArgs:EventArgs
{
private BirdStatus _s;

public BirdEventArgs(BirdStatus s)
{
this._s=s;

}

public BirdStatus Status
{
get
{
return this._s;
}
}

}
public enum BirdStatus
{
Flying,
Sleeping,
Dead
}
/// <summary>
/// Event Target
/// </summary>
public class Hunter
{
//private Bird bird;
public Hunter(Bird bird)
{
//bird=new Bird();
bird.BirdEvent+=new BirdEventHandler(this.OnWatch);
}
private void OnWatch(object sender,BirdEventArgs e)
{
switch(e.Status)
{
case BirdStatus.Flying:
this.Sleep();
break;
case BirdStatus.Dead:
this.FireBird();
break;
case BirdStatus.Sleeping:
this.KillBird();
break;
}
}
private void KillBird()
{
//...
MessageBox.Show("Killed");
}
private void FireBird()
{
//...
MessageBox.Show("FireBird");
}
private void Sleep()
{
//...
MessageBox.Show("Sleeping");
}
}
}
如果触发,可以在Main函数中写以下代码:
Bird b = new Bird();
Hunter h = new Hunter(b);
b.Flying();

就可以了! :)
BruceZhang 2002-05-15
  • 打赏
  • 举报
回复
iamsoloist(Soloist) 你问的好,我也正想问这个问题呢?

wenzm(疯之驴) 你回答的程序我已经写出来了,但我想知道的就像 iamsoloist(Soloist)问的问题,比如如何让鼠标或一个操作响应这一事件?
感觉vegetablebird(失败到这个岁数还在当流氓)回答的可能有些接近,但不不大清楚C#到底是怎么触发事件的?还是不太明白!
开心就好 2002-05-15
  • 打赏
  • 举报
回复
如下所示:
using System;

namespace testform
{
/// <summary>
/// Event source
/// </summary>
public class Bird
{
public Bird()
{
}
public void Flying()
{
this.OnBirdEvent(BirdStatus.Flying);
}
public void Dead()
{
this.OnBirdEvent(BirdStatus.Dead);

}
public void Sleep()
{
this.OnBirdEvent(BirdStatus.Sleeping);
}
private void OnBirdEvent(BirdStatus s)
{
if(this.BirdEvent!=null)
{
this.BirdEvent(this,new BirdEventArgs(s));
}
}
public event BirdEventHandler BirdEvent;
}
public delegate void BirdEventHandler(object sender,BirdEventArgs e);
public class BirdEventArgs:EventArgs
{
private BirdStatus _s;

public BirdEventArgs(BirdStatus s)
{
this._s=s;

}

public BirdStatus Status
{
get
{
return this._s;
}
}

}
public enum BirdStatus
{
Flying,
Sleeping,
Dead
}
/// <summary>
/// Event Target
/// </summary>
public class Hunter
{
private Bird bird;
public Hunter()
{
bird=new Bird();
bird.BirdEvent+=new BirdEventHandler(this.OnWatch);
}
private void OnWatch(object sender,BirdEventArgs e)
{
switch(e.Status)
{
case BirdStatus.Flying:
this.Sleep();
break;
case BirdStatus.Dead:
this.FireBird();
break;
case BirdStatus.Sleeping:
this.KillBird();
break;
}
}
private void KillBird()
{
...

}
private void FireBird()
{
...
}
private void Sleep()
{
...
}
}
}
Wasonzh 2002-05-15
  • 打赏
  • 举报
回复
在C#中,很多事件必须自己声明.
================================================================

CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!

★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。

★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。

Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]

iamsoloist 2002-05-15
  • 打赏
  • 举报
回复
在c#里,没有象vb.net那样,直接可以选择触发事件吗?如双击事件等。
bigtree21cn 2002-05-15
  • 打赏
  • 举报
回复
you must bound the event delegate before used everywhere.
Ordinary, in the form InitializeComponent method,try it:

this.textBox1.Change+= new System.EventHandler(this.textBox1_Change);
VegetableBird 2002-05-15
  • 打赏
  • 举报
回复
假设你声明了如下的委托:
public delegate void EventHandler(object sender, EventArgs e);

在一个名叫A的类中,对这个委托声明了如下的事件:
class A
{
//...
public event EventHandler MyEvent;
//...
}

在A中合适的地方激发你的事件:
//...
this.MyEvent(this,new System.EventArgs());
//...

在A外部的类中有A的实例
private A _a;

用如下的办法来响应你的事件:
1、声明事件处理函数:
private void A_MyEvent(object sender, EventArgs e)
{
//Your code here
}

2、在合适的地方为_a添加事件处理:
_a.MyEvent+=new EventHandler(A_MyEvent);


这样,A_MyEvent就能够响应A的MyEvent事件了。
wenzm 2002-05-15
  • 打赏
  • 举报
回复
没太明白你的意思

不知道这和你问的有没有关系
tbNew是个Button,下面为自定义其MouseUp事件方法:

tbNew.MouseUp+= new System.Windows.Forms.MouseEventHandler(this.tbNew_MouseUp);

private void tbTmpNew_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{//写入你要做的事的代码}
iamsoloist 2002-05-15
  • 打赏
  • 举报
回复
我也发现了,在c#里,找不到触发事件,但vb.net里却有的。
BruceZhang 2002-05-15
  • 打赏
  • 举报
回复
开心就好(开心就好) 你的这大段程序 有些地方我不大明白?

110,502

社区成员

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

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

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