WinForm控件画边框的问题

renjin 2010-11-18 07:14:00
控件画边框时代码如下:
...
Rectangle fram = Rectangle.FromLTRB(0, 0, this.Width - 1, this.Height - 1);
e.Graphics.DrawRectangle(new Pen(Brushes.Red), fram);
或:
Rectangle fram = new Rectangle(0, 0, Width - 1, Height - 1);
g.DrawRectangle(_drawPen, fram)
问题:
为什么这里的参数是Width-1和Height-1,而不是Width和Height
根据MSDN上对FromLTRB参数的定义是:
参数
left
此 Rectangle 结构左上角的 x 坐标。

top
此 Rectangle 结构左上角的 y 坐标。

right
此 Rectangle 结构右下角的 x 坐标。

bottom
此 Rectangle 结构右下角的 y 坐标。

对Rectangle参数的定义是:
参数
x
矩形左上角的 x 坐标。

y
矩形左上角的 y 坐标。

width
矩形的宽度。

height
矩形的高度。
...全文
659 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
renjin 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wuyazhe 的回复:]
不要边框设置border=none

绕进去了。

引用 15 楼 bourbon1795 的回复:
你的线至少要一个像素吧

+1
Width = 100,绘制0~99,从0开始可以有100个宽度的像素。
那么你线条占1个像素,x=0的垂线就是左边线了,宽度还是100,右边线就绘制到左边线往后推100个的位置,就是x=100的位置绘制垂线了。
[/Quote]
呵呵,钻牛角尖了,结贴!
chxg99 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyazhe 的回复:]
width表示啥?
长度假设100
width就是100
表示多少?
0~99
是不是?那右边框位置不是width-1么。
Width和Height的起始是1开始数的,绘制是0开始数的。起点不同,所以要-1.
[/Quote]
whrspsoft3723 2010-11-19
  • 打赏
  • 举报
回复
多观察,多实验。 大家已经说得很清楚了。
兔子-顾问 2010-11-19
  • 打赏
  • 举报
回复
不要边框设置border=none

绕进去了。
[Quote=引用 15 楼 bourbon1795 的回复:]
你的线至少要一个像素吧
[/Quote]
+1
Width = 100,绘制0~99,从0开始可以有100个宽度的像素。
那么你线条占1个像素,x=0的垂线就是左边线了,宽度还是100,右边线就绘制到左边线往后推100个的位置,就是x=100的位置绘制垂线了。
renjin 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 whrspsoft3723 的回复:]
现在还不明白 , -1 就是让你能看见。
[/Quote]
另外,边框线不可能只有右侧和底部有,DrawLin(pen,0,0,0,Height)还是能看到线
renjin 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wuyazhe 的回复:]
因为你控件本身有2个像素的边框。你抓图,用图片编辑器放大10倍仔细看。最外侧是控件边缘,四条边各有2条明暗交错的边框线,(我是说标准按钮,应用了操作系统风格的更多。)
[/Quote]
能不能把这个边框线去掉?
whrspsoft3723 2010-11-19
  • 打赏
  • 举报
回复
现在还不明白 , -1 就是让你能看见。
bourbon1795 2010-11-18
  • 打赏
  • 举报
回复
你的线至少要一个像素吧
兔子-顾问 2010-11-18
  • 打赏
  • 举报
回复
因为你控件本身有2个像素的边框。你抓图,用图片编辑器放大10倍仔细看。最外侧是控件边缘,四条边各有2条明暗交错的边框线,(我是说标准按钮,应用了操作系统风格的更多。)
renjin 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyazhe 的回复:]
width表示啥?
长度假设100
width就是100
表示多少?
0~99
是不是?那右边框位置不是width-1么。
Width和Height的起始是1开始数的,绘制是0开始数的。起点不同,所以要-1.
[/Quote]
Control.ClientRectangle代表的是控件的矩形框
如果用e.Graphics.DrawRectangle(pen,Control.ClientRectangle)画边框的话,结果是边框的右边和底边无法找到
whrspsoft3723 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 renjin 的回复:]
引用 9 楼 whrspsoft3723 的回复:
引用 3 楼 whrspsoft3723 的回复:
建议查下控件有没有客户区和非客户区?


看下这两个东东返回的数据有没有差别
Bounds

ClientRectangle

已经回答了,楼主没有好好理解。

我明白你的意思了,但这个e.Graphics是控件本身的Graphics即OnPaint里的e参数,我使用g.……
[/Quote]


换个类试下,panel, groupbox

兔子-顾问 2010-11-18
  • 打赏
  • 举报
回复
width表示啥?
长度假设100
width就是100
表示多少?
0~99
是不是?那右边框位置不是width-1么。
Width和Height的起始是1开始数的,绘制是0开始数的。起点不同,所以要-1.
renjin 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 whrspsoft3723 的回复:]
引用 3 楼 whrspsoft3723 的回复:
建议查下控件有没有客户区和非客户区?


看下这两个东东返回的数据有没有差别
Bounds

ClientRectangle

已经回答了,楼主没有好好理解。
[/Quote]
我明白你的意思了,但这个e.Graphics是控件本身的Graphics即OnPaint里的e参数,我使用g.DrawRectangle(_drawPen, this.ClientRectangle)画边框,结果和上面两种方式是一样的
whrspsoft3723 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 whrspsoft3723 的回复:]
建议查下控件有没有客户区和非客户区?
[/Quote]

看下这两个东东返回的数据有没有差别
Bounds

ClientRectangle

已经回答了,楼主没有好好理解。

renjin 2010-11-18
  • 打赏
  • 举报
回复
没人回复吗?
renjin 2010-11-18
  • 打赏
  • 举报
回复
额,我这快成猫扑大杂烩了
dacan66 2010-11-18
  • 打赏
  • 举报
回复
1楼我恨你。
renjin 2010-11-18
  • 打赏
  • 举报
回复
比如说画一个线段,分成5隔,标尺就应该是0,1,2,3,4,5;0和5应该是边线,但现在的运行结果是0和4是边线
whrspsoft3723 2010-11-18
  • 打赏
  • 举报
回复
建议查下控件有没有客户区和非客户区?
__还是少年 2010-11-18
  • 打赏
  • 举报
回复
我来学习的...
加载更多回复(1)

111,129

社区成员

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

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

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