我有一个带有SplitContainer的 Windows 窗体。在这个SplitContainer中是其他面板。
Panel1包含一个名为的自定义控件InputControl
和一个名为Display
.
为了找出当前显示的项目,我转向GetChildIndex 方法并使用 Windows 窗体作为父项:
int inputIndex = parent.Controls.GetChildIndex(InputControl);
int displayIndex = parent.Controls.GetChildIndex(Display);
在编写此代码时,我不确定是否可以将 Windows 窗体作为父窗体传入,因此我在之后放置了一个断点以检查两个索引是否大于 -1:
if ((-1 < inputIndex) && (-1 < displayIndex)) {
然而,在第一个整数inputIndex
被赋值之前,我被授予了ArgumentException这条消息,以表彰我的努力:
'child' 不是这个父级的子控件。
好的,我想这些不是这个父级的直接子控件。
另一方面,SplitContainer 肯定是直接子控件。那么,我应该搜索SplitContainer控件吗?
不过,从技术上讲,我想要 z-index 的控件位于Panel1控件中。这是否意味着我的代码必须看起来如此丑陋?
int inputIndex = splitControl1.Panel1.Controls.GetChildIndex(InputControl);
int displayIndex = splitControl1.Panel1.Controls.GetChildIndex(Display);
这似乎是为我的两 (2) 个控件获取 z 索引的一种非常无益的方式。
除了编写我自己的代码来跟踪哪个控件位于顶部之外,是否有更简单的方法来解决这个问题?
我想要一些返回任何控件的 z-index 的 Microsoft 方法,无论该控件是直接子控件还是父控件的某种其他后代。答案首先授予知道这一点的人。
如果不存在,我将如何编写一个而不必创建递归循环?在没有现有的 Microsoft 方法的情况下,这将作为奖励答案。
如果需要递归循环,请指出(并可能回答)最佳递归循环。