我发现当我将MouseWheel
事件附加到UserControl
或TextBox
时,如果TextBox
可滚动,则不会触发。它将滚动文本框而不是触发MouseWheel,我可以使它运行MouseWheel然后在执行e.Cancel
之后使TextBox
不滚动吗?
视频
代码
http://www.mediafire.com/?x3o09dz6dr5zoym
public MainWindow()
{
InitializeComponent();
textBox.MouseWheel += (s, e) =>
{
Random rand = new Random();
Debug.WriteLine(rand.NextDouble());
};
}
答案 0 :(得分:3)
我认为你的意思是 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);
}