C# Winform画图

实验二:用winform实现画图

实验目的

构造属于你的专属画图程序,可参考系统自带的绘图板


环境

  1. 操作系统: Windows 10 X64
  2. IDE: visual studio 2017
  3. 语言:C#

界面布局及控件使用

  • 整个页面 :Panel
  • 文件菜单 :MenuStrip
  • 主页,查看菜单 :TabControl
  • 绘图板 :PictureBox
  • 控制绘图板大小 :PictureBox
  • 工具、图形按钮 :Button
  • 粗细 :Label
  • 实线虚线 :Label
  • 填充按钮 :Label
  • 功能模块分区 :Panel
  • 功能模块分区的名字 :Label
  • 颜色板 :自定义控件名为 userControl1
  • 左下角的实时坐标 :StatusStrip
  • 按钮的文本提示 : ToolTip

界面展示

在这里插入图片描述


Point1–画布画板

画布相当于一张纸,我们使用两张纸,一张originalimage用于保留最终绘图并贴在画板上;一张interimage用于保存中间绘图痕迹。
比如画一个矩形

  1. 画图前先将中间画布初始化为原始画布(去掉绘图痕迹)
  2. 将矩形画在在中间画布
  3. 在鼠标释放时将中间画布复制给原始画布
  4. 将原始画布贴到画板上

Point2–颜色板的实现

新建及使用
  1. 新建项目->选择visual C# ->Windows 桌面 ->Windows窗体控件库
  2. 完成编辑后,在项目文件中找到 bin文件下的后缀为.dll的文件拖拽进工具箱即可。
完成效果:

使用的控件:
  • 颜色按钮:Button
  • 编辑颜色按钮:ColorDialog
  • 颜色1,2面板:Panel
功能实现:
  1. 选择颜色,判断改变颜色1还是颜色2

      private void button_Click(object sender, EventArgs e)
    {
        Button currentButton = (Button)sender;
        currentLabel.BackColor = currentButton.BackColor; 
        if(currentLabel==label1)
        {
            label1.BackColor = currentButton.BackColor;
            color1 = currentButton.BackColor;
        }
        else
        {
            label7.BackColor = currentButton.BackColor;
            color2 = currentButton.BackColor;
        }
    }
    
  2. 颜色1颜色2切换
    方法:设置一个currentlabel指向当前颜色label

       private void color1_Click(object sender, EventArgs e)
     {
             currentLabel = label1;
         label3.BackColor = Color.PowderBlue;
         label4.BackColor = Color.Transparent;
     }
    
     private void color2_Click(object sender, EventArgs e)
     {
         currentLabel = label7;
         label4.BackColor = Color.PowderBlue;
         label3.BackColor = Color.Transparent;
     }
    
  3. colordialog 调用颜色对话框,并将颜色添加到可用按钮中
    重点:colorDialog1.ShowDialog()

     private void makecolor_Click(object sender, EventArgs e)
     {
    
         if (colorDialog1.ShowDialog() == DialogResult.OK)
         {
             Color mycolor = colorDialog1.Color;
    
             for (int i = 0; i < haveUse; i++)
             {
                 if (allButton[i].BackColor == mycolor)//与第i个重复,则从第i+1个到num-1个都向前移动一格
                 {
                     for (int k = i; k < NUM - 1; k++)
                     {
                         allButton[k].BackColor = allButton[k + 1].BackColor;
                     }
                     haveUse--;
                     break;
                 }
             }
    
             if (haveUse == NUM)//已经满了,前移一格
             {
                 for (int i = 0; i < NUM - 1; i++)
                 {
                     allButton[i] = allButton[i + 1];
                 }
                 allButton[NUM - 1].BackColor = mycolor;
                 haveUse++;
             }
             else//还没满
             {
                 allButton[haveUse].BackColor = mycolor;
                 allButton[haveUse].Enabled = true;
                 haveUse++;
             }
         }
     }
    

Point3–绘制图形

重点:绘制图形的函数

        //使用Graphics对象实现
         switch (type)
        {
            case "
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值