gpt4 book ai didi

c# - NotifyIcon MouseDown MouseEventArgs 没有位置数据

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:55 24 4
gpt4 key购买 nike

我在使用 Forms 集成的 WPF 应用程序中为 NotifyIcon 设置了以下事件处理程序:

void MyNotifyIcon_MouseDown(Object sender, System.Windows.Forms.MouseEventArgs e)
{
ShowSettingsWindow();
}

但是,e.Location = {X=0,Y=0} 总是。有什么办法可以做到这一点吗?

更新

奇怪的是,人们投票决定关闭这个问题并投反对票。但是,在 WPF 应用程序的 App.xaml.cs 文件中创建一个新的 NotifyIcon 并亲自尝试一下,这显然是行不通的,而且非常简单。

更新

正如 Hans 所指出的,这是设计使然。它仍然没有回答可能的解决方法是什么的问题。此外,这是一个糟糕的设计,因为:

  1. 此事件发生在 MouseDown 上,这意味着单击时它应该具有鼠标位置的某些上下文,以便它发生。 NotifyIcon 的 WmMouseDown 处理程序确实具有 ref Message m 属性 which other controls use to establish the correct position ,但是它似乎忽略了这个属性并且没有在事件处理程序中使用它。我将其称为主要错误。

  2. 自事后剖析以来,获取 MouseDown 内的 Cursor.Position 不会为您提供 MouseDown 在单击托盘图标。在您单击它和引发您可以进一步移动鼠标的事件之间有一个小的延迟。您可以使用一个应用程序自己对此进行测试,该应用程序通过在单击托盘并获取其在 MouseDown 处理程序中的位置后快速移动鼠标来获取鼠标坐标。一种解决方法(它回答了我的问题)是使用 Cursor.Position 保存每个 MouseMove 的最后一个位置,并使用 MouseDown 上的最后一个位置> 作为单击图标的位置。 所有这些都清楚地表明了鼠标位置对于事件实际发生时间的需求。

显然,我是唯一关心 .NET 中这些不一致的人,而许多人似乎容忍它们或不能正确理解它们的含义。

最佳答案

它并不理想,因为 framework is designed to not send proper mouse event arguments正如 Hans 指出的那样,但一种解决方法是使用 Cursor.Position 保存每个 MouseMove 的最后一个位置,并将 MouseDown 上的最后一个位置用作上下文点击图标的位置。

关于c# - NotifyIcon MouseDown MouseEventArgs 没有位置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957470/

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