在所有其他控件上绘制自定义控件(之前添加)

时间:2012-05-28 14:48:05

标签: c# winforms user-controls topmost

我有一个UserControl,它添加了其他UserControls,但我希望添加的“最新”控件是最顶层的,所以它高于其他控件。因为控件应该相互重叠。像纸牌游戏。所以我添加了5个控件,第一个应该具有最低优先级,最优先级 - 最明显。

有什么想法吗?

或者我是否必须覆盖“容器”控件的Paint方法?和Control.CreateGraphics()并绘制它?

3 个答案:

答案 0 :(得分:1)

添加新控件时只需使用userControl1.BringToFront()

但请注意,这不会阻止用户“标记”到其下方的控件中。为此,您需要禁用或使其他控件不可见。

答案 1 :(得分:1)

考虑Control类的BringToFront和SendToBack方法。 查看这些问题的答案

How to set Z-order of a Control using WinForms

Bring Winforms control to front

答案 2 :(得分:0)

在Windows窗体中,控件添加到其父窗体控件集合的顺序决定了它们的渲染顺序。

这意味着要么在代码中处理子控件的添加并使用适当的插入位置,要么在设计器中移动控件(不幸的是,这通常意味着对* .Designer.cs文件进行危险的手工编辑)。

我建议您选择第一种方法,这是大型WinForms项目唯一可行的方法,并在您的代码中使控件插入逻辑显式化。顺便说一句,好消息是没有必要修改绘图处理程序,因此您对使用CreateGraphics()这样的黑客行为的担心是不合理的并且被驱散:)