我有垂直滾動條的窗體,用戶可以正常滾動上下滾動,而不處理WM_MOUSEWHEEL
的控件被選中,因爲窗體本身處理該事件,因此滾動工作得很好。在滾輪上滾動窗體的形式
但是,例如,當我選擇多行文本框時,我無法在鼠標滾輪上滾動我的表單,因爲WM_MOUSEWHEEL
由多行文本框處理。我發現在計算器上該解決方案,它工作得很好:
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x020a)
{
NativeMethods.SendMessage(this.Handle, m.Msg, m.WParam, m.LParam);
return true;
}
return false;
}
internal class NativeMethods
{
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);
}
形式向上和向下滾動的鼠標滾輪事件無論哪個子控制的重點是,但我的老闆不希望使用此解決方案,因爲他擔心它可能以某種方式在另一臺具有不同Windows的PC上崩潰。當用戶點擊表格無論如何,我會滿意,如果我可以從孩子上移除焦點控制,所以我想這:
private void MyWindowsForm_MouseDown(object sender, MouseEventArgs e)
{
this.Focus();
}
它不工作,因爲焦點自動設置到窗體上的第一個孩子的控制。
我的問題是:「有什麼辦法刪除焦點從子控件當窗體上用戶點擊,所以我可以使用鼠標滾輪滾動正常我的形式?」
希望你能理解我想要做的事情。提前致謝!
您的代碼不會崩潰。但您也可以傳遞輪子信息:'textBox1.MouseWheel + =(sender,e)=> {base.OnMouseWheel(e); };' – LarsTech
@LarsTech此解決方案也可以工作!非常感謝! :D – msmolcic