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

本文关键字:添加 控件 绘制 自定义控件 其他 | 更新日期: 2023-09-27 18:35:29

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

有什么想法吗?

还是必须重写"容器"控件的 Paint 方法?和 Control.CreateGraphics() 并绘制它?

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

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

如何使用 WinForms 设置控件的 Z 顺序

将 Winforms 控制置于最前面

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

但请注意,这不会阻止用户"按 Tab 键"进入其下方的控件。 为此,您需要禁用或使其他控件不可见。

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

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

我建议您采用第一种方法,这是大型 WinForms 项目的唯一可行方法,并在代码中显式执行控件插入逻辑。顺便说一下,好消息是没有必要修补油漆处理程序,所以你对使用CreateGraphics()等黑客的担忧是不合理的,并且被消除:)