[英]How to capture mouse wheel on panel?
如何在C#中捕獲面板上的鼠標滾輪? 我正在使用 WinForms
編輯:
我現在嘗試在PictureBox
上執行此操作。
我的代碼:
this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show("Click");
}
點擊作品。 惠靈沒有。 為什么?
如果在組件上看不到“MouseWheel”事件,則需要手動創建它。 此外,我們需要關注該組件,否則“MouseWheel”事件將不適用於該組件。 我將向您展示如何為“pictureBox1”創建一個“MouseWheel”事件以及它是如何工作的。
在構造函數內部,在該組件上創建一個鼠標滾輪事件。
InitializeComponent(); this.pictureBox1.MouseWheel += pictureBox1_MouseWheel;
手動創建函數。 根據我的例子,稱之為“pictureBox1_MouseWheel”
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e) { //you can do anything here }
在該組件上創建一個 MouseHover 事件(轉到 PicureBox1 中的屬性,選擇事件,找到“MouseHover”並雙擊“MouseHover”事件)。
調用“焦點()”; 該 MouseHover 事件中的方法。
pictureBox1.Focus();
現在運行程序。
Windows 將 WM_MOUSEWHEEL 消息發送到具有焦點的控件。 那不會是Panel,不是可以獲取焦點的控件。 一旦你在面板上放置一個控件,比如一個按鈕,那么按鈕就會獲得焦點和消息。
然而,該按鈕對消息沒有用,它沒有什么可滾動的。 Windows 注意到這一點並將消息發送給父級。 那是面板,現在它將滾動。
您將找到可以在此答案中獲得焦點的自定義面板的代碼。
更新:請注意,此行為在 Windows 10 中發生了變化。默認情況下,新的“將鼠標懸停在非活動窗口上時滾動”選項處於打開狀態。 這使得鼠標滾輪的行為與其在瀏覽器或 Office 程序中的工作方式更加一致。 在這種特定情況下,圖片框現在將獲取事件。 當心這個。
要手動接線...
this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
private void panel1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
///process mouse event
}
更簡單的方法是在 Visual Studio 中單擊面板,轉到屬性視圖面板,選擇事件,找到並雙擊“鼠標滾輪”事件。
在 Winforms 中,這是使用Control.MouseWheel 事件實現的
獲取鼠標滾輪事件很棘手。 最簡單的方法是使用
this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
而不是
this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
通過這種方式,表單獲取事件而不是控制。 這種方法很簡單,但有一個問題:您只能在表單中使用一個 mousewheel 事件。
如果您有多個控件來獲取鼠標滾輪事件,最好的方法是“Shehan Silva - weltZ”的這個答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.