我已完成以下操作,但整个面板双边框未正确填充的问题。 //内边框的右下线不是彩绘的 目标控件是面板
protected override void OnPaint(PaintEventArgs pe)
{
using (SolidBrush brush = new SolidBrush(BackColor))
pe.Graphics.FillRectangle(brush, this.Bounds);
// Inner Border
pe.Graphics.DrawRectangle(new Pen(Color.FromArgb(_InnerBorderColor.R, _InnerBorderColor.B, _InnerBorderColor.G), 1.0f), 1, 1, ClientSize.Width - 1, ClientSize.Height - 1);
using (SolidBrush brush = new SolidBrush(BackColor))
pe.Graphics.FillRectangle(brush, this.Bounds);
// Main Border
pe.Graphics.DrawRectangle(new Pen(Color.FromArgb(_BorderColor.R, _BorderColor.B, _BorderColor.G), 1.0f), 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
}
被修改
答案 0 :(得分:2)
你应该使用这个坐标:
e.Graphics.DrawRectangle(pen1,
this.ClientRectangle.Left, this.ClientRectangle.Top,
this.ClientRectangle.Width - 1, this.ClientRectangle.Height - 1);
e.Graphics.DrawRectangle(pen2,
this.ClientRectangle.Left + 1, this.ClientRectangle.Top + 1,
this.ClientRectangle.Width - 3, this.ClientRectangle.Height - 3);
注意:
答案 1 :(得分:2)
你有多个错误。使用Bounds是错误的,即在父坐标中,使用DisplayRectangle。你绘制背景两次,既不必要,第二次覆盖内部矩形。你绘制内部矩形两个像素太大。你忘记丢弃笔了,你往往会侥幸逃脱它,但是当你不这样做的时候,就会非常难看。最后但并非最不重要的是,这应该在OnPaintBackground中完成,因此它不会像便宜的汽车旅馆那样闪烁。
绘画错误并不容易诊断,最好的方法是逐步增加,一次一个。
更正后的代码如下:
protected override void OnPaintBackground(PaintEventArgs pe) {
base.OnPaintBackground(pe);
// Inner Border
using (var pen = new Pen(_InnerBorderColor))
pe.Graphics.DrawRectangle(pen, 1, 1, ClientSize.Width - 3, ClientSize.Height - 3);
// Main Border
using (var pen = new Pen(_BorderColor))
pe.Graphics.DrawRectangle(pen, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
}
答案 2 :(得分:0)
您需要从Client.Width / Height
中减去2pe.Graphics.DrawRectangle(new Pen(Color.FromArgb(_InnerBorderColor.R, _InnerBorderColor.B, _InnerBorderColor.G), 1.0f), 1, 1, ClientSize.Width - 2, ClientSize.Height - 2);