获取NumericUpDown编辑部分的句柄

时间:2011-11-27 22:37:50

标签: c# .net numericupdown

NumericUpDown有2个句柄/控件:外部旋转框和内部编辑文本框控件。

我需要获取内部文本框控件的句柄。 NumericUpDown.Handle给出外部句柄。

我在Google上发现的最接近的是this forum conversation。诀窍是使用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;

返回相同的内容。

那么,关于如何获取内部文本框的任何想法?

1 个答案:

答案 0 :(得分:2)

它在Winforms中的实现方式非常不同,没有伙伴控制。获取对文本框部分的引用很容易,但它违反了几个封装规则。不是真正的问题,NumericUpDown会及时冻结,永远不会改变。

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

小心那个TextBox控件的poking属性,而不是它的所有事件都被实现。