你如何绘制一个应该在其他一切之上的字符串? 现在,在我的面板中,我在Panel1.Controls中有一些用户控件。所以我把它添加到Paint方法:
Graphics g = Panel1.CreateGraphics();
g.DrawString("BUSTED", new Font("Arial", 20f), new SolidBrush(Color.Black), new PointF(50, 50));
问题是文本打印在用户控件后面,因此无法看到。 (如果我在打开时更改文本的位置,则会正确显示)。
有什么想法吗?
答案 0 :(得分:2)
所有Windows窗体控件都是基于HWND的,这意味着它们每个都有自己的窗口句柄,控件的z-order / parent-child决定了什么剪辑。面板绘制事件正在绘制到面板控件上,但面板控件输出被其所有子控件剪切。
透明度在Windows窗体中无法正常工作。如果你设置一些具有透明背景的东西,它通常会结束表格背景显示,而不是它的直接父母。
我已经以各种方式解决了这个问题。
答案 1 :(得分:1)
尝试添加覆盖所有控件的面板,然后绘制其中。必须设置面板透明度。
以下是更多信息:Drawing on top of controls inside a panel (C# WinForms)
答案 2 :(得分:1)
我不确定它是否可行,但您可以在面板内的所有用户控件上尝试SendToBack,然后文本将显示在顶部。
答案 3 :(得分:0)
如何在Panel中覆盖OnPaint,并在绘制基础后编写绘图代码?
class DrawingPanel : Panel {
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// Your drawing code here
}
}