加个 panel  宽度  或 高度  设置 成 1

解决方案 »

  1.   

    Graphics类需要一个对图形对象的引用。通常,在控件或窗体的Paint事件中.……
    this.Paint += new PaintEventHandler(form1_Paint);
    ……public void form1_Paint(Object sender,PaintEventArgs e)
    {
    Pen blackPen = new Pen(Color.Black, 3);
    Point point1 = new Point(100, 100);
    Point point2 = new Point(500, 100);
    e.Graphics.DrawLine(blackPen, point1, point2);
    }
      

  2.   

    谢谢两位,一定给分。我想直接用控件画线,c#中没有shape控件吗?为什么图象编辑器始终是灰的不能用?
      

  3.   

    To thcp(风流公子):
    >>c#中没有shape控件吗?
    没有,用GDI+画并不麻烦.你可以参考System.Drawing 命名空间的资料
    ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemDrawing.htm
      

  4.   

    呵呵MS提供的System.Drawing;已经够用了,如果不够的话用System.Drawing.Drawing2D;
    相关的东东,参看一下MSDN,并注意一下,VS.net中提供的属性,稍稍看一下了之后就出来了。对了,你可以自己封装一个用户控件来实现,在你理解了GDI+之后是很容易的。
      

  5.   

    给你一个在winform里画直线的例子,希望对你有帮助:
    如下是摘抄:
    GDI+是从GDI演化而来的,但是在Visual Studio的以前版本中使用GDI是相当复杂的,而且工作量巨大。现在在GDI+中,微软已经帮我们解决了许多问题,因而使用GDI+编程将变得非常容易。 GDI+包含在System.Drawing.Dll集合中,所有的GDI+类包含在System.Drawing,System.Text,System.Printing,System.Internal,System.Imaging,System.Drawing2D以及System.Design等命名空间中。 本文先向大家介绍一下图形类(Graphics Class)。然后,会向大家介绍一些最常用的类和结构,包括画笔(Pen)、画刷(Brush)、字体(Font)、颜色(Color)等类或结构。文章的最后还给出了一些很有用的用.Net框架的原生语言C#实现的例子。 图形类(Graphics Class)
    我们用图形类的对象来表示GDI+的图形表面。为了使用GDI+,我们必须先建立一个图形类对象。通常,我们可以从Paint这个事件获得图形类对象的一个引用或是通过重载方法OnPaint来取得该对象。具体方法如下: 
     private void form1_Paint(object sender, PaintEventArgs pe){Graphics g = pe.Graphics;}
     或是: 
     protected override void OnPaint(PaintEventArgs pe){Graphics g = pe.Graphics;}
     建立好图形类对象后,我们就可以调用以下一些方法来完成基本的画图功能了。 
     DrawArc   (已重载的)画一段弧线 
     DrawClosedCurve  (已重载的)画一段由一些点确定的闭合折线 
     DrawCurve   (已重载的)画一段由一些点确定的折线 
     DrawEllipse  (已重载的)画一个椭圆 
      DrawImage  (已重载的)画一副图象 
     DrawLine  (已重载的)画一条直线 
     DrawPath  画一段路径(包括直线和曲线) 
     DrawPie  (已重载的)画一个馅饼区的轮廓 
     DrawPolygon  (已重载的)画一个多边形的轮廓 
     DrawRectangle  (已重载的)画一个矩形的轮廓 
     DrawString  (已重载的)画一串字符串 
     FillEllipse  (已重载的)填充一个椭圆形区域 
    FillPath  填充一个路径 
     FillPie  (已重载的)填充一个馅饼区域 
     FillPolygon  (已重载的)填充一个多边形 
     FillRectangle  用画刷填充一个矩形 
     FillRectangles  用画刷填充一系列矩形 
     FillRegion  填充一个区域 图形对象
    建立图形对象后,我们就可以用它来画线、填充图形以及画文本等等。以下是一些主要的图形对象: 
     Brush 
     用来填充特定的表面 
     Pen 
     用来画直线、多边形、矩形、弧线以及馅饼区等 
     Font 
     用来设置文本的字体 
     Color 
     用来设置特定对象的颜色(在GDI+中,颜色可以是Alpha混合的) 画刷类(Brush Class)
    画刷类是一个抽象基类,我们不能直接将它实例化。我们必须实例化它的子类对象,它的子类包括:SolidBrush,TextureBrush,RectangleGradientBrush以及LinearGradientBrush。 举例如下: 
     
     LinearGradientBrush  lBrush = new  LinearGradientBrush(rect, Color.Red, Color.Yellow,LinearGradientMode.BackwardDiagonal);
    Brush  brsh = new  SolidBrush(Color.Red), 40, 40, 140, 140);
     
    SolidBrush类定义一把由单色构成的画刷。这个画刷可以用来填充像矩形、椭圆形、馅饼形、多边形以及路径这样的图形区域。 TextureBrush类定义一把可以将一定区域用图象来填充的画刷。 LinearGradiantBrush类可以定义一把两种颜色间变化的画刷,也可以定义一把多种颜色间变化的画刷。 画笔类(Pen Class)
    画笔类用来画具有特定宽度和风格的直线和曲线。我们必须先用画笔类的构造函数初始化一个画笔对象,在实例化的时候还可以用到颜色和画刷。 用特定的颜色初始化新的画笔对象: public Pen(Color); 用特定的画刷初始化新的画笔对象: public Pen(Brush); 用特定的画刷以及宽度初始化新的画笔对象: public Pen(Brush, float); 用特定的颜色以及宽度初始化新的画笔对象: public Pen(Color, float); 举例如下: 
     
     Pen  pn = new  Pen( Color.Blue );
     
    或是:  
     
     Pen  pn = new  Pen( Color.Blue, 100 );
     
    以下是画笔类的一些最常用的属性: 
     Alignment 
     获得或设置用画笔画的对象的边界  
     Brush 
     获得或设置决定画笔特性的画刷  
     Color 
     获得或设置画笔的颜色  
     Width 
     获得或设置画笔的宽度 
    字体类(Font Class)
    字体类决定了特定文本的字体格式,比如:字体类型、大小以及风格。我们用字体类的构造函数建立一种字体。 用特定的属性初始化新的字体对象: 
     public Font(string, float);
     用特定的已存在的字体和字体风格初始化新的字体对象: 
     
     public Font(Font, FontStyle);
     
    以下是一些字体风格: 
     Bold 
     粗体  
     Italic 
     斜体  
     Regular 
     正常字体  
     Strikeout 
     有删除线  
     Underline 
     有下划线 举例如下: 
     Graphics  g ;Font  font = new  Font("Times New Roman", 26);
     颜色结构(Color Structure)
    一个颜色结构代表一种ARGB格式的颜色。以下是它的ARGB属性: A:获得颜色的Alpha成分值 B:获得颜色的蓝色成分值 G:获得颜色的绿色成分值 R:获得颜色的红色成分值 下面是如何使用颜色结构的例子: 
     Pen  pn = new  Pen( Color.Blue );
     到现在,我相信大家已经对.Net框架下的GDI+有了大致的了解。为了让大家更直观的理解有关GDI+的编程知识,我特意为大家准备了以下一些基本但又很有用例子。通过对这些例子的学习,我相信大家对.Net框架下的GDI+编程会有更深刻的理解。同时要说明的是,下面的例子是用C#语言实现的,如果你是一位VB.net的爱好者,不妨通过适当修改代码来实现同样的功能。 画一个矩形:  
     
     protected override void OnPaint(PaintEventArgs pe) 
    {Graphics g = pe.Graphics ;//设置矩形区域的位置和大小
    Rectangle rect = new Rectangle(0, 0, 200, 200);//使填充矩形的颜色从红色到黄色渐变
    LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow,LinearGradientMode.BackwardDiagonal);
    g.FillRectangle(lBrush, rect);}
     
    画一个椭圆:  protected override void OnPaint(PaintEventArgs pe)
    {Graphics g = pe.Graphics ;//建立一只100象素宽、呈蓝色的画笔
    Pen pn = new Pen( Color. ForestGreen, 100 );
    Rectangle rect = new Rectangle(50, 50, 180, 100);
    g.DrawEllipse( pn, rect );}
     画一段文本:  protected override void OnPaint(PaintEventArgs pe)
    {Graphics g = pe.Graphics;//文本内容为"Welcome to the Graphics World!"
    g.DrawString("Welcome to the Graphics World!", this.Font, new SolidBrush(Color.Red), 10,10);}
     
    画一条直线:  protected override void OnPaint(PaintEventArgs pe)
    {Graphics g = pe.Graphics ;
    Pen pn = new Pen( Color.Blue, 10 );
    //预先设定好两个点
    Point pt1 = new Point( 30, 30);
    Point pt2 = new Point( 110, 100);
    g.DrawLine( pn, pt1, pt2 );}
     画一段折线:  protected override void OnPaint(PaintEventArgs pe)
    {Graphics g = pe.Graphics;//建立一只20象素宽、呈粉红色且半透明的画笔Pen penExample = new Pen(Color.FromArgb(150, Color.Purple), 20);
    //使画笔画出虚线
    penExample.DashStyle = DashStyle.Dash;
    //将画笔开始和结束处都设置为圆形
    penExample.StartCap = LineCap.Round;
    penExample.EndCap = LineCap.Round;
    //现在用画笔画曲线
    g.DrawCurve(penExample, new Point[] {new Point(100, 70),new Point(350, 120),new Point(250, 170),new Point(70, 70),new Point(20, 170),});}
     
    画一个填充颜色逐渐变化的多边形图形: 
     
     protected override void OnPaint(PaintEventArgs e)//这里是重载OnPaint函数
    {e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(180,Color.White)),ClientRectangle);
    //建立图形路径
    GraphicsPath path = new GraphicsPath(new Point[] {new Point(40, 40),new Point(275, 100),new Point(105, 125),new Point(190, 200),new Point(50, 250),new Point(20, 80),}, new byte[] {(byte)PathPointType.Start,(byte)PathPointType.Bezier,(byte)PathPointType.Bezier,(byte)PathPointType.Bezier,(byte)PathPointType.Line,(byte)PathPointType.Line,});
    //建立一个PathGradientBrush对象PathGradientBrush pgb = new PathGradientBrush(path);
    pgb.SurroundColors = new Color[] {Color.Green,Color.Yellow,Color.Red,Color.Blue,Color.Orange,Color.White,};
    //最后进行填充
    e.Graphics.FillPath(pgb, path);}
    (注:以上例子均需在Windows2000 Server版或Windows XP Professional版以及Vs.net环境下才能实现)