如下代码所示:
GraphicsPath path = new GraphicsPath();
path.AddString  ...
path.AddRectangle ...
上面我在这个GraphicsPath中既有矩形框、又有文本。在实际输出的时候遇到了问题,如下描述:
如果采用e.Graphics.FillPath的话,那么画出的整个矩形框内部也都填充了颜色,而我想要的仅仅只是一个矩形的边框。
如果采用e.Graphics.DrawPath的话,画出的是矩形的边框,内部没有填充颜色,但是又有新的问题,那就是文字都变成了空心的了。
如何解决这两者的冲突问题?谢谢大家!

解决方案 »

  1.   

    你最好文字和矩形分开处理,不要一起处理.比如你可以选用DrawString来显示文字信息,然后再用DrawRectangle来画矩形.另外,处理字符串显示的时候最好不要把它加入Path中.
      

  2.   

    谢谢 hbxtlhx(平民百姓) 
    我想知道你说的“处理字符串显示的时候最好不要把它加入Path中”,这点的原因是什么?我就是想知道这点,谢谢!
      

  3.   

    先e.Graphics.DrawPath再e.Graphics.DrawString
      

  4.   

    一是灵活性不大,二是处理比较复杂,三是在思路上不如分开更清晰,四是这样处理的很少,基本这样的处理都是分开处理.除非有特殊的要求.所以说“处理字符串显示的时候最好不要把它加入Path中”.
      

  5.   

    文字用drawstring,不要加到path里面
      

  6.   

    我之所以想到将文字加到GraphicsPath里面,用GraphicsPath来绘制文字,是因为这样的话,我可以得到文字输出的范围(矩形窗口),比如制作一个表格时。因为GraphicsPath.GetBounds()可以得到这个窗口。如果不采用的话,那只有自己计算了,好像要麻烦一些。
      

  7.   

    给你个参考:
    protected override void OnClick(EventArgs e)
    {
    base.OnClick(e);
    Graphics g = this.CreateGraphics();
    string str = "你的字符串";
    Size size = TextRenderer.MeasureText(str, this.Font);
    Rectangle rect = new Rectangle(10, 10, size.Width, size.Height);
    TextRenderer.DrawText(g, str, this.Font, rect, Color.Black);
    g.DrawRectangle(SystemPens.ControlText, rect);
    }
      

  8.   

    谢谢hbxtlhx(平民百姓),你的方法很不错。但是试了后有个问题,那就是通过TextRenderer.MeasureText计算出的尺寸,字符串的右边多了部分空格,这个怎么解决的呀?谢谢!
      

  9.   

    TextRenderer.MeasureText已经很精确了,这个空格可以不计的.