0

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

填充绘制事件处理程序

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);

产生这个:

ClientRecangle 被剪裁

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

4

1 回答 1

2

您可以使用:

ControlPaint.DrawBorder(g, this.ClientRectangle, _
                        Color.Red, ButtonBorderStyle.Solid);

哪里Graphics g = e.Graphics;

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

rectangle r = this.ClientRectangle;
r.Width -= 1;
r.Height -= 1;

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

当然,这来自OnPaint事件处理程序。

于 2012-12-17T16:16:58.427 回答