zoukankan      html  css  js  c++  java
  • c# 动态绘制直线和曲线

    在本案例中利用Graphics对象动态地绘制直线和曲线。程序运行后,选择“直线”单选按钮,然后按下鼠标左键拖动鼠标就可以绘制直线,选择“曲线”单选按钮,然后移动鼠标就可以绘制曲线。

    制作要点:

    1.Graphics对象的应用。

    2.窗体的MouseUp事件和MouseDown事件的应用。

    3.窗体的MouseMove事件的应用。

    4.Graphics对象的DrawLine()方法的应用。

      该方法可以绘制一条线条,其语法结构如下:

           public void DrawLine(System.Drawing.Pen pen,float x1,float y1,float x2,float y2)

      各参数意义如下:

      1).pen:System.Drawing.Pen,他确定线条的颜色、宽度和样式。

      2).x1:第一个点的x坐标。

      3).y1:第一个点的y坐标。

      4).x2:第二个点的x坐标。

      5).y2:第二个点的y坐标。

    5.Graphics对象的DrawRectangle()方法的应用。

    该方法可以绘制由坐标对、宽度和高度指定的矩形,其语法结构如下:

       public void DrawRectangle(System.Drawing.Pen pen,float x,float y,float width,float height)

    各参数意义如下:

    1)pen: System.Drawing.Pen,它确定矩形的颜色、宽度和样式。

    2)x:要绘制的矩形的左上角的x坐标。

    3)y:要绘制的矩形的左上角的y坐标。

    4)要绘制的矩形的宽度。

    5)height:要绘制的矩形的高度。

    制作步骤:

    1.新建一个Windows窗体应用程序,设置"Text"属性为“动态绘制直线和曲线”。

    2.添加一个GroupBox控件。设置'Text"属性为“请选择绘图类型”。

    3.添加2个RadioButton控件,设置"Text"属性分别为“直线”和“曲线”。

    4.添加2个按钮。设置其"Text"属性为“清空”和“退出”。

    添加代码:

    1.双击窗体。定义公共变量。

            int startX;     //获取鼠标起始点的X坐标
            int startY;    //获取鼠标起始点的Y坐标
            Graphics g;  //定义Graphics对象实例

    2.双击窗体,添加:

    private void Form1_Load(object sender, EventArgs e)
            {
                this.StartPosition = FormStartPosition.CenterScreen;
                this.BackColor = Color.Snow;         //设置窗体背景颜色
            }

    3.分别选择选择窗体事件中的“MouseUp”、"MouseDown"、"MouseMove"事件。添加如下代码:

     private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                g = this.CreateGraphics();               //创建Graphics对象实例
                Pen p = new Pen(Color.Red,4);      //设置画笔颜色和宽度
                if (radioButton1.Checked == true)
                {
                    g.DrawLine(p, startX, startY, e.X, e.Y);  //绘制直线
                }
            }

            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                startX = e.X;       //为变量赋值
                startY = e.Y;
            }

            private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                g = this.CreateGraphics();
                Pen p = new Pen(Color.Blue,2);       //设置画笔颜色和宽度
                if (radioButton2.Checked == true)
                {
                    g.DrawRectangle(p,e.X,e.Y,1,1);    //绘制曲线
                }
            }

    4.分别双击“清空”和“退出”按钮,添加:

    private void button1_Click(object sender, EventArgs e)
            {
                g = this.CreateGraphics();
                g.Clear(Color.Snow);       //清空窗体背景
            }

            private void button2_Click(object sender, EventArgs e)
            {
                this.Close();
                Application.Exit();
            }

  • 相关阅读:
    有7g和2g的砝码各一个,怎样称可以3次把140g东西分为50g和90g???????
    中缀到后缀(一个例子)
    动态代理模式的使用
    代理模式用来初始化的延迟下载
    ReentrantLock Condition 实现消费者生产者问题
    Two Sum
    [leetcode]重建二叉树(先序和终须) 中序遍和后续
    (转载)旋转数组查找 最简洁方法 总结
    [不明觉厉] 下一个排列
    codeforces -- 283A
  • 原文地址:https://www.cnblogs.com/Peter-Luo/p/CSharp_Draw_line.html
Copyright © 2011-2022 走看看