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事件被触发。奇怪啊! 展开
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事件被触发。奇怪啊! 展开
3个回答
展开全部
回复等待众高人回复
期待答案
期待答案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我困了明早给你看看...你也早点休息不要给别的回答者以可乘之机...
--------------------------------------------------------------
我醒了楼主
事情是这样的 当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事件后执行的 有不明白的补充 我接着写
--------------------------------------------------------------
我醒了楼主
事情是这样的 当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事件后执行的 有不明白的补充 我接着写
参考资料: 自己写的...
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询