gpt4 book ai didi

WPF Mousedown => 没有 MouseLeave 事件

转载 作者:行者123 更新时间:2023-12-03 23:52:48 25 4
gpt4 key购买 nike

我正在使用 Microsoft Blend 构建 Windows Presentation Foundation 控件。

当我通过按下鼠标左键离开我的控制时,不会引发 MouseLeave-Event。为什么不?

最佳答案

这是预期的行为:当你在做 mousedown 时在控件上并离开控件时,控件仍然保留其在鼠标上的“捕获”,这意味着控件不会触发 MouseLeave-Event .一旦鼠标按钮在控件之外被释放,Mouse-Leave 事件就会被触发。

为了避免这种情况,您可以简单地告诉您的控件不要捕获鼠标:

private void ControlMouseDown(System.Object sender, System.Windows.Forms.MouseEventArgs e)
{
Control control = (Control) sender;
control.Capture = false; //release capture.
}

现在,即使在按下按钮时移出,也会触发 MouseLeave 事件。

如果您需要在控件内部进行捕获,则需要付出更多努力:
  • 当按下鼠标键时,开始手动跟踪鼠标位置
  • Top比较位置, LeftSize相关控件的属性。
  • 决定是否需要停止捕获鼠标的控件。
    public partial class Form1 : Form
    {
    private Point point;
    private Boolean myCapture = false;

    public Form1()
    {
    InitializeComponent();
    }

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
    myCapture = true;
    }

    private void button1_MouseMove(object sender, MouseEventArgs e)
    {
    if (myCapture)
    {
    point = Cursor.Position;

    if (!(point.X > button1.Left && point.X < button1.Left + button1.Size.Width && point.Y > button1.Top && point.Y < button1.Top + button1.Size.Height))
    {
    button1.Capture = false; //this will release the capture and trigger the MouseLeave event immediately.
    myCapture = false;
    }
    }
    }

    private void button1_MouseLeave(object sender, EventArgs e)
    {
    MessageBox.Show("Mouse leaving");
    }

    }

  • 当然你需要在 MouseUp 上停止自己的跟踪( myCapture=false; )。忘记那个了:)

    关于WPF Mousedown => 没有 MouseLeave 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3797844/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com