当TextBox可滚动时,不会触发MouseScroll事件
我发现当我将MouseWheel
事件附加到我的UserControl
或TextBox
,如果TextBox
是可滚动的,它不会触发。 它将滚动文本框而不是触发MouseWheel,我可以使它运行MouseWheel然后在做一些事情之后e.Cancel
它。它会使TextBox
不滚动吗?
更新:使用video和代码
video
http://screenr.com/ZGF
码
http://www.mediafire.com/?x3o09dz6dr5zoym
public MainWindow() { InitializeComponent(); textBox.MouseWheel += (s, e) => { Random rand = new Random(); Debug.WriteLine(rand.NextDouble()); }; }
我假设你的意思是UserControl上的MouseWheel事件不会触发。 这是正常的,TextBox很高兴接受多行时的消息。 MouseWheel事件在设计器中不可见的原因。 父窗口仅在具有焦点的控件不处理它时才会看到消息。
不确定你是否应该解决这个问题,用户真的希望文本框滚动。 但您可以拦截消息,以便文本框无法看到它并将消息传递给父级。 在项目中添加一个新类,粘贴下面显示的代码。 编译。 从工具箱顶部删除新控件。
using System; using System.Windows.Forms; using System.Runtime.InteropServices; class MyTextBox : TextBox { protected override void WndProc(ref Message m) { if (m.Msg == 0x20a && this.Parent != null) { PostMessage(this.Parent.Handle, m.Msg, m.WParam, m.LParam); } else base.WndProc(ref m); } [DllImport("user32.dll")] private static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); }