C# 如何把事件添加到 系统中简单的说就是 比如系统自带的MouseMove事件

如题:
我需要
1.不通过Timer。(原因:我不可能为了做一个软件而使用Timer这么大的组件来达到事件轮询通知的功能太浪费系统资源了)
2.不通过在自己的程序里的函数检查。(原因:我不可能去使用函数检查,因为这太浪费CPU了,我的软件的主循环每秒需要循环33次以上简单的说,就是几乎所有的代码都要在每一秒内走33遍,所以不允许,有一些,多余的性能损耗)
3.不能使用线程(道理如上,雷同)
3.我需要像系统的如鼠标的move事件一样由系统给我发消息,而非我自己程序通知,系统发送消息到事件处理函数后,我在事件处理函数内实现相应的功能。就这样。
请教
补充:
我就是想要实现:
比如:鼠标的一系列事件,都是由系统触发,right?yes
那么,也就是说从某种意义上来说,系统里面有一个类似timer的东西,或者一个线程之类的东西,在不断地检查事件是否被触发,right?yes
现在,我的要求就是把我的事件触发逻辑验证代码(检查函数),注册到系统的检查机制中去,而不是自己通过循环,或定时器实现。

MythYsJh 说得些道理,但还是不能解决我的问题啊。。。
另外,推荐的答案,不知是谁选的,真够水的。。。
期待高人出现

MythYsJh
if( ProcessCompleted != null )
{
ProcessCompleted(...);
}
这是个逻辑判断的过程,请问这个判断过程的代码,因该放在哪里呢?

mousemove这种事件是有东西去触发就会发生。它的逻辑有可能是当鼠标的坐标在某个区域内时,就触发事件:
if( mousemove )//鼠标划过
{
if( Mousemove != null )
{
Mousemove( ..);
}
}
其实就是一个简单的事件,比如自己在做业务逻辑处理时,需要在处理完毕通知使用这个业务逻辑的用户,就可以定义一个事件:
public event EventHandler ProcessCompleted;
当业务逻辑处理完毕时,触发这个事件:
//处理完毕,通知调用者
if( ProcessCompleted != null )
{
ProcessCompleted(...);
}
而在调用者那里,他可以注册这个事件以在处理完毕时得到通知
Biz.ProcessCompleted += MyMethod;

就是这么一个流程。但觉有点乱,希望你能看懂。。。

最初的UI控制权全在开发人员,也就是程序提醒用户输入,或者程序必须在条件满足时必须触发事件,后来这部分工作被移交给了UI框架,也就是你说的系统。在上面的例子中业务逻辑处理模块同样也就是你这个意义上的系统。WINFORM事件是如何触发的我不清楚,但在web程序里如点击事件并不是框架通过timer或新线程来一直轮训是不是触发了事件,而是通过回发页面,回发后系统会取得引起回发的控件的id,从而相应的执行为该控件定义的回发事件。不过我相信在winform里也不应该会通过timer或线程来判断事件是不是触发了。

放在你准备触发那个事件的地方
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-01
你只要在事件中调用一下系统自带的类不就可以了,比如说异常类,很多是不需要自己亲自写的,你只要会调用,系统自动帮你处理了。----个人观点,不知道有没有帮助。本回答被网友采纳
第2个回答  2011-01-02
描述不是很清楚。但是从你的描述看来,似乎你是想要一个Hook的功能:也就是鼠标全局钩子,让自己能捕捉到鼠标的所有动作。
这个可以通过安装鼠标钩子来完成。具体的上网搜下吧 :-)
第3个回答  2011-01-17
Graphics类可以画啊,配合你提到的鼠标事件,记录下坐标调用相应的方法就行了
第4个回答  2011-01-01
可能没有,我也不太确定。具体你想实现什么功能?

C#中MouseMove的使用方法
c#的winform里的MouseMove事件很特殊,当鼠标在一个组件上移动的时候会收到MouseMove事件,但是另一种情况:当在组件上按住左键拖拽移动(组件先收到MouseDown事件)的时候,鼠标在整个窗口内移动时,这个组件都会收到MouseMove事件,而这个组件的MouseUp事件的就收范围也会变为窗口,也就是说,按住左键的情况是特殊的,随后的所...

画连续线条:即利用控件的MouseMove事件,对每次移动进行DrawLine C#
[STAThread] public static void Main(string[] args) { var panel = new MyPanel(); panel.Dock = DockStyle.Fill; DrawLines(panel); var form = new Form(); form.Controls.Add(panel); form.ShowDialog(); } \/\/ 为了方便,直接在一个函数中完成 private...

C#某对象,如按钮,事件中的MouseEnter和MouseMove还有MouseHover什么区别...
MouseEnter 事件响应鼠标(或触笔)移入对象的边界区域 就是鼠标进去按钮区域就会触发.MouseMove 事件响应鼠标指针(或触笔)跨对象内容区域的移动 就是鼠标在按钮的区域内移动就会触发 MouseHover 是当鼠标悬停在控件周围指定区域(“悬停矩形”)上时触发 它的触发时间由MouseHoverTime 属性控制 ...

c# 中给控件添加OnMouseMove事件响应函数不响应的问题
思路应该是没有问题,我这边这样添加是可以进入断点程序的。你是不是应该检查一下你的整体代码。或许你界面布局有问题出现了焦点被夺走的情况,如果这个控件没有焦点,那么也不会激发这个事件。如果你能帖出你全部代码或许可以找到问题在哪里。

怎么用c#实现计算鼠标不动的时间
微软官方提供了C#控制鼠标的代码,然后你加一个定时器,来触发你的事件即可。private void InitializeComponent(){ ...this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);...} private void Form1_MouseMove(object sender, System.Windows....

c#中Button问题
this.button1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.button1_MouseMove);是指,声明窗体中的button1按钮的MouseMove事件,“+=”就是对事件的订阅,当鼠标移动到button1上的时候将会触发这个事件,然后就会执行button1_MouseMove这个方法(这个方法具体执行什么操作要自己写)。其中...

如何使用C#代码实现对鼠标是否移动的监测
添加mousemove事件,把需要改变的标记放在事件中,这样就可以通过flag来判断鼠标是否移动了。

在C#程序运行时,如何改变无边框窗体大小和托动窗体,并且能处理鼠标事件...
控件是可以显示在里面的,你只要加个label,把label的属性设为visualble=fause就行。设置鼠标经过头像的mouseHover和mouseLeave事件,当mouseHover时label的属性visualble=true,当mouseLeave时label的属性visualble=fause即可。窗体的鼠标事件可以设置控件的cursor属性,里面可以选择许多种鼠标图形。只要是正常的...

C# 鼠标移动到BUTTON上方时,就会弹出一个对话框
把Button的事件添加到MouseMove这个事件上就OK了 例如:private void Button1_MouseMove(object sender, MouseEventArgs e){ MessageBox.Show("你好!");}

c#应用程序怎么做鼠标经过按钮,按钮上出现图片的效果
你给按钮添加事件 MouseMove,private void button1_MouseMove(object sender, MouseEventArgs e) { button1.BackgroundImage = new Bitmap("\/image\/_2.jpg"); }这样,你如果要让图片在鼠标离开后变回来,需要增加MouseLeave 事件,里面把图片改回 ...

相似回答