当TextBox可滚动时,不会触发MouseScroll事件

我发现当我将MouseWheel事件附加到我的UserControlTextBox ,如果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); }