1

またはにMouseWheelイベントを添付すると、がスクロール可能である場合はトリガーされないことがわかりました。テキストボックスをスクロールし、MouseWheelをトリガーしません。MouseWheelを実行するように作成し、何かを実行した後、スクロールしないようにすることはできますか?UserControlTextBoxTextBoxe.CancelTextBox

更新:ビデオとコード付き

ビデオ

http://screenr.com/ZGF

コード

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

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

1 に答える 1

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);
}
于 2010-11-26T19:20:54.503 に答える