在CASE中,我们有一个名为z-index的属性,在Winform中为Panel控件设置的“ Z-Index”有什么相同之处?

最佳答案

WinForms具有z顺序,但是您不能将其作为数字访问。而是,每个控件都有一个BringToFront方法和SendToBack方法,它们分别将控件移到z顺序的顶部或底部。

尽管您很少遇到BringToFront或SendToBack不能提供所需内容的情况,但不确定到底是为什么以这种方式公开的。

更新:我错了,您可以通过控件容器的Controls集合上的方法直接访问z顺序。这是一个包装它的简单方法:

public void SetControlZOrder(Control ctrl, int z)
{
    ctrl.Parent.Controls.SetChildIndex(ctrl, z);
}


我猜他们将其封装在BringToFrontSendToBack中只是为了使所有操作简单易用。我鼓掌。

更新2:我在这里将您的评论解释为一个不同的答案,表示您希望能够采用一个位于面板内部且大于面板的控件(以便隐藏其中的一部分),并使其成为控件位于面板的前面,并且比面板大(这样您就可以看到整个控件)。

为此,您可以从面板上删除控件,将其位置移动到原始面板的位置,然后将其添加到表单的控件中:

panel1.Controls.Remove(button1);
button1.Left += panel1.Left;
button1.Top += panel1.Top;
this.Controls.Add(button1);


左移和上移是必要的,因为按钮的位置最初是相对于面板的,现在将相对于窗体。移位使它保持在原始虚拟位置,因此它似乎从面板中出来。

然后,您将不得不将其放回到面板中,这与上述代码相反。

09-08 03:21