c#中单击按钮为何会触发MouseLeave事件

我在Form1上声明了一个button1。并为button1编写了ButtonUp和ButtonLeave事件。我发现在单击button1时,OnMouseLeave会首... 我在Form1上声明了一个button1。并为button1编写了ButtonUp 和 ButtonLeave事件。我发现在单击button1时,OnMouseLeave会首先被触发,百思不得其解。望高手解答。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.button1.MouseLeave += new System.EventHandler(this.OnMouseLeave);
this.button1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.OnMouseUp);
}

private void OnMouseUp(object sender, MouseEventArgs e)
{
MessageBox.Show("Up");
}

private void OnMouseLeave(object sender, EventArgs e)
{
MessageBox.Show("Leave");
}

private void button1_Click(object sender, EventArgs e)
{

}
}
}
我在单击时鼠标并没有离开按钮 ,所以MouseMove→MouseDown→Click→MouseUp→MouseLeave
相应链应该截至到MouseUp。可是MouseLeave事件却先于MouseUp事件被触发。奇怪啊!
展开
 我来答
百度网友dc91b32
2009-04-11 · TA获得超过5650个赞
知道大有可为答主
回答量:5653
采纳率:0%
帮助的人:0
展开全部

那是因为你在MouseUp事件里加了一个MessageBox,你把那行代码删掉就正常了, 

因为首先执行的是MouseUp事件,这个MessageBox.Show("Up");一执行,就会触发MouseLeave事件,所你你看到的效果是先弹出Leave消息框,再弹出Up消息框,但实际上是先触发MouseUp事件,由MouseUp事件引发MouseLeave事件,

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
定复2d
2009-04-10 · TA获得超过3196个赞
知道大有可为答主
回答量:2052
采纳率:0%
帮助的人:1939万
展开全部
回复等待众高人回复
期待答案
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
居下而存
2009-04-11 · 超过28用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:79.5万
展开全部
我困了明早给你看看...你也早点休息不要给别的回答者以可乘之机...

--------------------------------------------------------------

我醒了楼主

事情是这样的 当MessageBox()方法在执行后 ,鼠标指针将会离开Button
而Mouse事件优先级又比MessageBox()弹出事件高 所以会先去执行MouseLeave事件但是实际上 还是up事件先触发 只不过MessageBox弹出事件在它之后罢了 但是还是MouseUp里的MessageBox()先执行你把代码改成这样就很直观了

int i = 0;//自定义计数器
private void OnMouseUp(object sender, MouseEventArgs e)
{
MessageBox.Show("Up" + (++i).ToString());
}

private void OnMouseLeave(object sender, EventArgs e)
{
MessageBox.Show("Leave"+ (++i).ToString());
}

你会发现每次Leave事件的i值都比Up事件里的i值大 这说明什么 说明Leave事件后执行的 有不明白的补充 我接着写

参考资料: 自己写的...

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式