C# 正确调整自定义绘制控件的大小

C# 正确调整自定义绘制控件的大小,c#,winforms,visual-studio,gdi+,C#,Winforms,Visual Studio,Gdi+,我正在尝试创建一个自定义控件,它可以正确地绘制自身以填充其当前大小。我假设应该使用该属性来调整大小,但客户端矩形的右侧和底部似乎被剪裁了 将绘图事件处理程序填充为 Rectangle smaller = new Rectangle(5, 5, ClientRectangle.Width - 10, ClientRectangle.Height - 10); e.Graphics.DrawRectangle(System.Drawing.Pens.Black, smaller); e.Grap

我正在尝试创建一个自定义控件,它可以正确地绘制自身以填充其当前大小。我假设应该使用该属性来调整大小,但客户端矩形的右侧和底部似乎被剪裁了

将绘图事件处理程序填充为

Rectangle smaller = new Rectangle(5, 5, ClientRectangle.Width - 10, ClientRectangle.Height - 10);
e.Graphics.DrawRectangle(System.Drawing.Pens.Black, smaller);  
e.Graphics.DrawRectangle(System.Drawing.Pens.Red, ClientRectangle);
结果如下:

我应该使用什么来获得控件的可绘制区域?

您可以使用:

ControlPaint.DrawBorder(g, this.ClientRectangle, _
                        Color.Red, ButtonBorderStyle.Solid);
其中
Graphics g=e.Graphics

或者像你做的那样画,但宽度和高度减去1(1因为宽度和高度都包含在内,但绘制矩形需要大小不包括最后一个像素-它在内部计算
x+w/y+h
,然后在最后一个像素后的下一个像素的位置结束,因此我们需要减去1以获得最后一个像素的位置)


当然,这是从事件处理程序的
OnPaint
中得到的。

可能的重复:@Benjamin的可能的重复从可能的重复中得到的答案似乎几乎是正确的。似乎你需要从底部和右侧减去2,而不是1。似乎你需要从底部和右侧减去2,而不是1。谢谢!
rectangle r = this.ClientRectangle;
r.Width -= 1;
r.Height -= 1;

g.DrawRectangle(System.Drawing.Pens.Red, r);