问个Panel重绘的问题,

ggewt2td 2012-05-24 01:32:39
private void panel1_Paint(object sender, PaintEventArgs e)
{
Rectangle rc = e.ClipRectangle;
rc.Width = rc.Width - 1;
rc.Height = rc.Height - 1;
e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Red)), rc);
}

上面我绘制Panel的边框,
为什么要加两行:
rc.Width = rc.Width - 1;
rc.Height = rc.Height - 1;
才能显示右边框和下边框,
如果不加这两行,那右边框和下边框就不显示出来,为什么?
...全文
202 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snow-stone 2013-08-21
  • 打赏
  • 举报
回复
学到了,感谢
stonespace 2012-05-24
  • 打赏
  • 举报
回复
应该差不多吧,不过这是细节问题,因为ClipRectangle大小是控件设置的,不同的控件可能设置不同的范围,也可能有些控件就把ClipRectangle设置为多一个像素,这时候就可以在边框上画,

[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,


那是不是所……
[/Quote]
熙风 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,


那是不是所……
[/Quote]

是的,,,尽量不要在控件边框上面画
stonespace 2012-05-24
  • 打赏
  • 举报
回复
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,
ggewt2td 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,
[/Quote]

那是不是所有的控件,都是这样,不绘制剪辑区域的边框?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧