C# 在子控件顶部绘制图像
我需要在包含一些子控件的面板上绘制一个图像。我不想让它隐藏在那些控件后面,现在在C# 在子控件顶部绘制图像,c#,winforms,C#,Winforms,我需要在包含一些子控件的面板上绘制一个图像。我不想让它隐藏在那些控件后面,现在在Paint事件中绘制图像时就是这样 下面是我用来覆盖面板的OnPaint方法的代码: protected override void OnPaint(PaintEventArgs e) { try { base.OnPaint(e); //Draw icon for views at top right corner of the panel. e.Gr
Paint
事件中绘制图像时就是这样
下面是我用来覆盖面板的OnPaint
方法的代码:
protected override void OnPaint(PaintEventArgs e)
{
try
{
base.OnPaint(e);
//Draw icon for views at top right corner of the panel.
e.Graphics.SmoothingMode =
System.Drawing.Drawing2D.SmoothingMode.HighQuality;
if (_viewButton != ViewButton.None)
{
Brush menuBrush =
new SolidBrush(_viewButton == ViewButton.Highlighted ?
Color.Black : Color.Gray);
e.Graphics.FillPolygon(menuBrush, new Point[] {
new Point(this.Width - 29, 03),
new Point(this.Width - 19, 03),
new Point(this.Width - 24, 09) });
menuBrush.Dispose();
//Draw border of the panel.
Rectangle borderRect =
new Rectangle(0, 0, this.Width - 1, this.Height - 1);
GraphicsPath borderPath = GetRoundPath(borderRect, 8);
e.Graphics.DrawPath(new Pen(Color.LightGray), borderPath);
}
}
catch (Exception ex)
{
throw new IDSException(ex);
}
}
(或的重写)是执行此类操作的错误位置,因为您需要确保绘制例程被最后调用 相反,如果您可以访问父控件,请重写
OnPaint
方法,然后调用基本实现然后绘制您的图像,它将被绘制在所有其他内容之上。执行此类操作的位置(或覆盖)是错误的,因为您需要确保绘制例程被最后调用
相反,如果您可以访问父控件,请重写
OnPaint
方法,然后调用基本实现然后绘制您的图像,它将被绘制在所有其他内容之上。最好的方法是在图像上使用BringToFront()
方法
它将在所有控件的顶部绘制图像。
但是,除非所有控件都位于同一父控件上,否则此操作将不起作用。执行此操作的最佳方法是在图像上使用
BringToFront()
方法
它将在所有控件的顶部绘制图像。
但是,除非所有控件都位于同一父控件上,否则这将不起作用。Hi casperOne感谢您的快速回答,因为我正在急切地等待。我试过那件事,但失败了。它什么也没用(@Lalit:如果失败,您应该显示显示失败的代码。否则,我们无法帮助您找出问题所在。您好,我将代码作为另一个答案发布,因为注释长度限制了我。修复它将是gr8帮助。:@Lalit:当您在调试器中单步执行此代码时,它是否引发异常?@Lalit:为什么不将父控件设置为自定义用户控件,其中包含一个面板,然后覆盖用户控件而不是面板的OnPaint方法?您好,casperOne,谢谢您的快速回答,因为我正在急切地等待。我试过那件事,但失败了。它什么也没用(@Lalit:如果失败,您应该显示显示失败的代码。否则,我们无法帮助您找出问题所在。您好,我将代码作为另一个答案发布,因为注释长度限制了我。修复它将是gr8帮助。:@Lalit:当您在调试器中单步执行此代码时,它是否引发了异常?@Lalit:为什么不让父控件成为一个自定义的用户控件,其中包含一个面板,然后覆盖用户控件的OnPaint方法而不是面板?嗨,Jon,实际上我正在面板上绘制一个多边形和一个矩形。我想我不能把它带到前面去。如果我错了,请纠正我,告诉我怎么走。对不起,我在想一个图片盒。嗨,乔恩,实际上我在面板上画了一个多边形和一个矩形。我想我不能把它带到前面去。如果我错了,请纠正我,告诉我怎么走。对不起,我在想一个图片盒。
protected override void OnPaint(PaintEventArgs e)
{
try
{
base.OnPaint(e);
//Draw icon for views at top right corner of the panel.
e.Graphics.SmoothingMode =
System.Drawing.Drawing2D.SmoothingMode.HighQuality;
if (_viewButton != ViewButton.None)
{
Brush menuBrush =
new SolidBrush(_viewButton == ViewButton.Highlighted ?
Color.Black : Color.Gray);
e.Graphics.FillPolygon(menuBrush, new Point[] {
new Point(this.Width - 29, 03),
new Point(this.Width - 19, 03),
new Point(this.Width - 24, 09) });
menuBrush.Dispose();
//Draw border of the panel.
Rectangle borderRect =
new Rectangle(0, 0, this.Width - 1, this.Height - 1);
GraphicsPath borderPath = GetRoundPath(borderRect, 8);
e.Graphics.DrawPath(new Pen(Color.LightGray), borderPath);
}
}
catch (Exception ex)
{
throw new IDSException(ex);
}
}