惊爆:Graphics的bug。求证:有图有代码

mohugomohu 2010-01-19 11:11:20
首先,大家来做个选择题:
首先新建一个窗体,把FormBorderStyle设为None
我需要先画一条宽度为10,长度为100的竖线,x坐标为0,y坐标为0。
画完竖线,我先填充一个宽度为10长度为100的方块,要紧挨着刚才那条竖线。

代码如下:

private void test_Paint(object sender, PaintEventArgs e)
{
Graphics gp = this.CreateGraphics();

//画线
Pen p = new Pen(Color.Black, 10);
gp.DrawLine(p, 0, 0, 0, 100);


//画方框
SolidBrush sb = new SolidBrush(Color.Red);
//int x = 10;
int x = 0;
gp.FillRectangle(sb, x, 0, 10, 100);
}


请选择,上面的画方框的x坐标应该是:
A:x=10
B:x=0













我的答案:上面两个都不对!

运行结果图片:






各位,请解释一下吧
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Baesky 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wartim 的回复:]
这个不是bug。。。
10是线宽,而线起始点是从中心算的,
你从(0,0)点画一条宽度是10的线,
等于告诉它(0,0)点是起始的中心点,然后往左往右各延伸10/2=5个像素
,所以你画的线其实只显示了一半的宽度
x=10/2就紧挨着了

C# code
Graphics gp=this.CreateGraphics();//画线 Pen p=new Pen(Color.Black,10);
gp.DrawLine(p,0,0,0,100);//画方框 SolidBrush sb=new SolidBrush(Color.Red);int x=10/2;
gp.FillRectangle(sb, x,0,10,100);
[/Quote]
赞同
hhc123 2010-01-19
  • 打赏
  • 举报
回复
我是来接点分去换人民币好过年啊
足球中国 2010-01-19
  • 打赏
  • 举报
回复
还以为炒菜呢。
ouc_ajax 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wartim 的回复:]
这个不是bug。。。
10是线宽,而线起始点是从中心算的,
你从(0,0)点画一条宽度是10的线,
等于告诉它(0,0)点是起始的中心点,然后往左往右各延伸10/2=5个像素
,所以你画的线其实只显示了一半的宽度
x=10/2就紧挨着了

C# code
Graphics gp=this.CreateGraphics();//画线 Pen p=new Pen(Color.Black,10);
gp.DrawLine(p,0,0,0,100);//画方框 SolidBrush sb=new SolidBrush(Color.Red);int x=10/2;
gp.FillRectangle(sb, x,0,10,100);
[/Quote]

UP!
mohugomohu 2010-01-19
  • 打赏
  • 举报
回复
你是对的!!
ErrorCode1987 2010-01-19
  • 打赏
  • 举报
回复
真搞笑,难道微软是吃干饭的~~
mytimes_walker 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mohugomohu 的回复:]
引用 2 楼 mytimes_walker 的回复:
想好了再说,应该是你代码的问题。


要不你新建一个窗体来试一下?
[/Quote]
我宁愿相信是我代码的问题,我也不相信是Graphics的BUG。
别一出问题就说别人的有BUG。
wartim 2010-01-19
  • 打赏
  • 举报
回复
这个不是bug。。。
10是线宽,而线起始点是从中心算的,
你从(0,0)点画一条宽度是10的线,
等于告诉它(0,0)点是起始的中心点,然后往左往右各延伸10/2=5个像素
,所以你画的线其实只显示了一半的宽度
x=10/2就紧挨着了


Graphics gp = this.CreateGraphics();

//画线
Pen p = new Pen(Color.Black, 10);
gp.DrawLine(p, 0, 0, 0, 100);


//画方框
SolidBrush sb = new SolidBrush(Color.Red);
int x = 10/2;
gp.FillRectangle(sb, x, 0, 10, 100);
ftcool 2010-01-19
  • 打赏
  • 举报
回复
http://www.itbbk.com/video/aspDotNet/
mohugomohu 2010-01-19
  • 打赏
  • 举报
回复
高手在哪里啊??
代码不是已经贴出来了吗??
希望能证明我是错的或者对的都行,主要是要合理!!
healer_kx 2010-01-19
  • 打赏
  • 举报
回复
嗯,接分。
mohugomohu 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mytimes_walker 的回复:]
想好了再说,应该是你代码的问题。
[/Quote]

要不你新建一个窗体来试一下?
wangping06 2010-01-19
  • 打赏
  • 举报
回复
小技巧:教您如何更快获得可用分
mytimes_walker 2010-01-19
  • 打赏
  • 举报
回复
想好了再说,应该是你代码的问题。
flyerwing 2010-01-19
  • 打赏
  • 举报
回复
你很无聊也!
wsdydmw 2010-01-19
  • 打赏
  • 举报
回复
小技巧:教您如何更快获得可用分

111,120

社区成员

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

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

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