System.Windows.Forms.Textboxから継承した独自のテキストボックスを作成し、WndProcをオーバーライドすることができます。
WndProcは、オペレーティングシステム、電源メッセージ、入力などのすべてに関するメッセージを受け取る最初のメソッドです。メソッドの名前は、Win32(およびWin16)日の後半にある2つの主な機能実装するのは "WndProc"またはWindowsのプロシージャです。
このようにすると、イベントが基本実装にディスパッチされる前に、マウス(または他のメッセージ)のウィンドウメッセージをインターセプトできるようになりました。
以下の例では、左ボタンを押し下げたり、上に移動したり、ダブルクリックしてベースコントロールを処理したりしません。
public partial class MyTextBox : TextBox
{
int WM_LBUTTONDOWN = 0x0201; //513
int WM_LBUTTONUP = 0x0202; //514
int WM_LBUTTONDBLCLK = 0x0203; //515
public MyTextBox()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDOWN ||
m.Msg == WM_LBUTTONUP ||
m.Msg == WM_LBUTTONDBLCLK // && Your State To Check
)
{
//Dont dispatch message
return;
}
//Dispatch as usual
base.WndProc(ref m);
}
}
だけの事はあなたの状態がメッセージかに渡すときを決定するためにチェックを追加して行うことを残しました。
処理するWindowsメッセージのリストは、hereです。
非常に良い、ありがとう、私はネットの下にドリルする必要があることを知っていたスタック – johnc
まだ私にマウスイベントargsを取得しないが、私このソリューションのようにして回避することができます – johnc
マウスイベントargsを渡し、同じイベントハンドラをフォームで使用するテキストボックスに追加イベントを追加することができます。 このようにして、デフォルトのマウス操作の実装を回避することができます。 –