我是想做一个可以设置边框颜色和宽度的Label控件,现在已经OK,
但是有个奇怪的问题,
把边框宽度设为单数的时候,图1的"h1"和"w1"两条边比"h2"和"w2"宽一个像素。
把边框宽度设为偶数的时候,四条边就一样宽了。
百思不得其解,难不成在设置边框宽度的时候必须设置为偶数吧?
高人请指点,不懂的也帮我顶一顶,谢啦。图1:
          w1
     _____________
  h1|             |h2
    |_____________|
          w2
我的代码摘录:
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics; 
base.OnPaint(pe);         //clorborColor=边框色,从属性中取得;intBorWid=边框宽度,从属性中取得
Pen linePen = new Pen(clorborColor,intBorWid);
Point p1 = new Point(0,0);
Point p2 = new Point(this.Width,0);
Point p3 = new Point(0,this.Height);
Point p4 = new Point(this.Width,this.Height); g.DrawLine(linePen , p1 , p2);
g.DrawLine(linePen , p1 , p3);
g.DrawLine(linePen , p4 , p2);
g.DrawLine(linePen , p4 , p3);
}

解决方案 »

  1.   

    DrawLine应该注意一点,如果是画一条直线且宽度为1,直接给出两个点的坐标就行但是如果在Pen对象中指定了宽度参数的话,画直线时不能直接写出两个点的实际坐标在有宽度的情况下,DrawLine以指定的两个点连线为中心,向两边扩大宽度。也就是说,给出的点坐标应该类似如下:g.DrawLine(linePen,intBorWid/2,0,intBorWid/2,Height);  //左边框…………其余类似你说为偶数时四边框一样,但实际上它们都跟你想要的宽度少了一半
      

  2.   

    之前应先加上判断:if(intBorWid/2 !=0)
    {
        …………//起始点的取值
    }