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

时间:2010-11-26 14:39:59

标签: c# wpf textbox mousewheel

我发现当我将MouseWheel事件附加到UserControlTextBox时,如果TextBox可滚动,则不会触发。它将滚动文本框而不是触发MouseWheel,我可以使它运行MouseWheel然后在执行e.Cancel之后使TextBox不滚动吗?

更新:使用视频&代码

视频

http://screenr.com/ZGF

代码

http://www.mediafire.com/?x3o09dz6dr5zoym

public MainWindow()
{
    InitializeComponent();
    textBox.MouseWheel += (s, e) =>
    {
        Random rand = new Random();
        Debug.WriteLine(rand.NextDouble());
    };
}

1 个答案:

答案 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);
}