[英]Wheel-button's middle-button MouseDown event doesn't happen if you scroll the Mouse Wheel first
在我的 C# Windows Forms 應用程序和其他應用程序中,鼠標滾輪/鼠標中鍵有些問題。
在以下情況下,如何檢測到鼠標中鍵被按住? (因為Control.MouseButtons
說謊!)
如果我滾動鼠標滾輪,然后快速按下滾輪按鈕(在控制面板中設置為產生中鍵單擊),則此代碼不會檢測到鼠標中鍵的MouseDown
事件。 此外,如果我繼續按住滾輪按鈕,並在按住按鈕的同時滾動滾輪,那么我會收到 MouseWheel 事件,但Control.MouseButtons
並不表示中間按鈕被按住。 這似乎是一個嚴重的缺陷。 滾輪按鈕現在物理上被按住,但似乎沒有辦法檢測到它被按下了。
與此相反,如果我先按下滾輪按鈕(不滾動滾輪)並按住它,那么滾輪事件正確地指示鼠標中鍵按下了預期。
這似乎我可能正在與微軟實施的一些秘密聰明作斗爭,以防止在使用鼠標滾輪時意外點擊滾輪按鈕。 但實際上,這意味着如果在按下滾輪之前稍微滾動鼠標中鍵(滾輪按鈕),則無法正確檢測到鼠標中鍵(滾輪按鈕)向下。 我實際上不知道這種聰明是否在硬件級別或驅動程序級別或應用程序級別實現或什么。 我不完全確定是否有什么可以做的。
我特別擔心,因為我試圖在其他應用程序中重現這種現象,例如,我能夠在Blender中重現該問題。 所以也許在 C# 中沒有什么可以做的。 或者也許有一個控制面板設置或可以克服這個問題的東西。 我不確定這是否是硬件問題,但我懷疑它可能與鼠標驅動程序有關——而且這似乎是故意的。 我不知道其他供應商的其他類型的鼠標設備會在多大程度上發生這種行為,或者只是這個鼠標。 我還沒有檢查它是否在其他操作系統上使用相同的鼠標發生。
我希望有人能告訴我一種方法來檢測在這種情況下鼠標中鍵是否按下。 如果不是,那么我也很想知道這是否是可以通過軟件(驅動程序?)更新糾正的錯誤,或者是否是此鼠標(或所有鼠標設備)的硬件限制。
這是可用於檢測此現象的代碼。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MouseDown += Form1_MouseDown;
MouseWheel += Form1_MouseWheel;
}
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
System.Diagnostics.Debug.WriteLine("MouseWheel {0}", MouseButtons);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
System.Diagnostics.Debug.WriteLine("MouseDown");
}
}
同樣,重現問題的神奇步驟是:
Control.MouseButtons
被愚弄以為鼠標中鍵沒有按下。)如果這些細節中的任何一個很重要:
MouseDown 檢測何時按下任何鼠標按鈕 - 同時 MouseClick 檢測何時釋放按鈕。 假設您可以捕獲以下事件:
public Form1()
{
InitializeComponent();
MouseDown += Form1_MouseDown;
MouseClick += Form1_Click;
MouseWheel += Form1_MouseWheel;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Button pressed {0}", e.Button);
}
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Wheel in action....");
}
private void Form1_Click(object sender, MouseEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Button Released {0}", e.Button);
}
編輯
Wheel in action
和Button pressed Middle
之間的時間差是 32ms。
讓我知道以上是否是您正在尋找的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.