C# 获取NumericUpDown的句柄';编辑部分

C# 获取NumericUpDown的句柄';编辑部分,c#,.net,numericupdown,C#,.net,Numericupdown,NumericUpDown有两个句柄/控件:外部spinbox和内部类似编辑文本框的控件 我需要得到内部文本框控件的句柄NumericUpDown.Handle给出外部句柄 我在谷歌上找到的最接近的是这个。诀窍是使用UDM\u GETBUDDY=WM\u USER+106=0x0400+106消息,该消息返回好友窗口的句柄,在本例中为文本编辑 最初的输出是这样的: control.Capture = true; IntPtr outer = User32.GetCapture(); IntPtr

NumericUpDown
有两个句柄/控件:外部spinbox和内部类似编辑文本框的控件

我需要得到内部文本框控件的句柄
NumericUpDown.Handle
给出外部句柄

我在谷歌上找到的最接近的是这个。诀窍是使用
UDM\u GETBUDDY=WM\u 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\u CHILD)
。其中
GW_CHILD=5

control.Capture = true;
IntPtr outer = User32.GetCapture();
IntPtr inner = User32.GetWindow(outer, 5);
对于这两种方法,我总是得到
internal=0
,这显然不是正确的答案。然而,OP说方法2似乎有效,所以我可能做错了什么

顺便说一句,“捕获”机制似乎毫无用处,因为我可以简单地使用:

IntPtr outer = control.Handle;
返回相同的值


那么,关于如何获取内部文本框句柄有什么想法吗

它在Winforms中的实现非常不同,没有伙伴控件。获取对文本框部分的引用很容易,尽管它违反了一些封装规则。这不是一个真正的问题,NumericUpDown在时间上是冻结的,永远不会改变

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

小心拨动该文本框控件的属性,并不是所有的事件都被实现。

Wow,真好吃。也没有任何P/Invoke!我会无视我违反规则的事实(P/Invoke本来是更严重的重罪,不是吗?)。谢谢