【问题标题】:Drawing Custom Control above all other controls (previously added)在所有其他控件之上绘制自定义控件(以前添加)
【发布时间】:2012-06-02 22:21:25
【问题描述】:

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

有什么想法吗?

或者我是否必须重写“容器”控件的 Paint 方法?和Control.CreateGraphics() 并画出来?

【问题讨论】:

  • 这不是自动发生的吗?

标签: c# winforms user-controls topmost


【解决方案1】:

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

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

我建议您采用第一种方法,这对于较大的 WinForms 项目来说是唯一可行的方法,并在您的代码中明确控制插入逻辑。顺便说一句,好消息是无需修补绘图处理程序,因此您对使用 CreateGraphics() 之类的黑客行为的担忧是不合理的,并且可以消除 :)

【讨论】:

    【解决方案2】:

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

    How to set Z-order of a Control using WinForms

    Bring Winforms control to front

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多