1

ANumericUpDownには 2 つのハンドル/コントロールがあります。外側のスピンボックスと内側の編集テキスト ボックスのようなコントロールです。

内側のテキスト ボックス コントロールのハンドルを取得する必要があります。NumericUpDown.Handle外側のハンドルを指定します。

私が Google で見つけた最も近いものは、このフォーラムの会話です。秘訣はUDM_GETBUDDY = WM_USER+106 = 0x0400+106、バディ ウィンドウ (この場合はテキスト編集) のハンドルを返すメッセージを使用することです。

最初の出力は次のようなものでした。

control.Capture = true;
IntPtr outer = User32.GetCapture();
IntPtr inner = new IntPtr(User32.SendMessage(outer, (0x0400 + 106), 0, 0));

しかし、OPはこれが機能していないと言ったので、誰かが使用することを提案しましたGetWindow(outer, GW_CHILD)。どこGW_CHILD = 5

control.Capture = true;
IntPtr outer = User32.GetCapture();
IntPtr inner = User32.GetWindow(outer, 5);

これらの方法の両方について、私は常に最終的に になりますがinner = 0、これは明らかに正しい答えではありません。ただし、OPは方法2が機能しているように見えたので、何か間違ったことをしている可能性があります.

ちなみに、「キャプチャ」メカニズムは役に立たないようです。単純に使用できます。

IntPtr outer = control.Handle;

これは同じものを返します。

それで、内側のテキストボックスハンドルを取得する方法についてのアイデアはありますか?

4

1 に答える 1

2

Winforms では非常に異なる方法で実装されており、バディ コントロールはありません。テキスト ボックス部分への参照を取得するのは簡単ですが、いくつかのカプセル化規則に違反しています。NumericUpDown は時間内に凍結され、変更されることはありません。

        var box = (TextBox)numericUpDown1.Controls[1];

すべてのイベントが実装されているわけではありません。

于 2011-11-27T23:25:10.807 に答える