iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用C#怎么实现一个简易画图板
  • 326
分享到

使用C#怎么实现一个简易画图板

2023-06-14 13:06:47 326人浏览 独家记忆
摘要

本篇文章为大家展示了使用C#怎么实现一个简易画图板,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义公共变量用于多个窗体之间共同使用数据public class TempData

本篇文章为大家展示了使用C#怎么实现一个简易画图板,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

定义公共变量

用于多个窗体之间共同使用数据

public class TempData    {        //用于多个窗体共同使用的数据            public static int size=5;        public static SolidBrush solidBrush=new SolidBrush(Color.Black);        public static Graphics p;    }

绘图需要画笔和画布

创建画布对象

 bm = new Bitmap(panel1.Width, panel1.Height);     panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));

创建画笔对象

   SolidBrush solidBrush=new SolidBrush(Color.Black);

实现对鼠标行为的捕捉

定义一个bool的变量paint,用于指示是否开始作画,但其值为true时开始作画,为false时结束作画

鼠标左键按下则:使paint值变为true

private void panel1_MouseDown(object sender, MouseEventArgs e)        {            paint = true;//开始画画        }

鼠标左键松开则:使paint值变为false

private void panel1_MouseUp(object sender, MouseEventArgs e)        {            paint = false;//结束画画        }

绘制图形

paint为true时

e.x、e.y用来获取鼠标的坐标,便于在对应的地方进行绘制

用radioButton1.Checked(画笔)进一步判断是否选中画笔,选中画笔则在鼠标移动的位置画上相应的线条

if (paint && radioButton1.Checked)            {                TempData.p.FillEllipse(TempData.solidBrush, e.X, e.Y, TempData.size, TempData.size);                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));            }

用radioButton2.Checked(橡皮)进一步判断是否选中橡皮,选中橡皮则在鼠标移动的位置擦去相应的线条

if (paint && radioButton2.Checked)            {                TempData.p.FillEllipse(new SolidBrush(Color.White), e.X, e.Y, 30, 30);                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));            }

使用C#怎么实现一个简易画图板

用两个单选按钮控件radioButton(只可以选择其中一个)来分别表示画笔和橡皮

paint为false时

不响应画画与擦除操作

鼠标按下左键且移动时:

private void panel1_MouseMove(object sender, MouseEventArgs e)        {            TempData.p = Graphics.FromImage(bm);//用bm来创建一个新的画布            if (paint && radioButton1.Checked)            {                TempData.p.FillEllipse(TempData.solidBrush, e.X, e.Y, TempData.size, TempData.size);                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));            }            else if (paint && radioButton2.Checked)            {                TempData.p.FillEllipse(new SolidBrush(Color.White), e.X, e.Y, 30, 30);                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));            }        }

画笔粗细的选择

使用C#怎么实现一个简易画图板

使用单选按钮控件实现用户画笔粗细的选择

首先定义了一个类,里面包含公共的变量size,size即为画笔的粗细

选择不同的radioButton则对size赋不同的值,用if_else_语句实现

private void button1_Click(object sender, EventArgs e)        {            if (radioButton1.Checked)            {                MessageBox.Show("你选择了小号画笔", "信息提示", MessageBoxButtons.OK);                TempData.size = 5;            }            else if (radioButton2.Checked)            {                MessageBox.Show("你选择了中号画笔", "信息提示", MessageBoxButtons.OK);                TempData.size = 10;            }            else if (radioButton3.Checked)            {                MessageBox.Show("你选择了大号画笔", "信息提示", MessageBoxButtons.OK);                TempData.size = 15;            }            else            {                MessageBox.Show("你选择了刷子", "信息提示", MessageBoxButtons.OK);                TempData.size = 20;            }            this.Close();//关闭当前窗口        }

MessageBox.Show(“提示内容”, “提示框名称”, 按键模式);用于展示提示内容

this.Close();用于关闭当前窗口

画笔颜色的选择

使用C#怎么实现一个简易画图板

对颜色对话框的调用

用语句TempData.solidBrush = new SolidBrush(colorDialog1.Color);将选择的颜色设置到画笔中

private void 颜色ToolStripMenuItem_Click(object sender, EventArgs e)        {            colorDialog1.ShowDialog();            TempData.solidBrush = new SolidBrush(colorDialog1.Color);        }

打开文件

对打开文件对话框的调用

可打开jpg格式的文件,由打开文件对话框的返回值确定是否执行将jpg设置为画板的背景的功能

private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)        {            bool open = false;            openFileDialog1.FileName = "";            openFileDialog1.Filter = "JPG File(*.jpg)|*.JPG";            DialogResult r = openFileDialog1.ShowDialog();//打开文件对话框并返回值            if (r.ToString() == "OK") open = true;//ToString()用于将值转化为其等价的字符串形式            if (open)            {                panel1.BackgroundImage = Image.FromFile(openFileDialog1.FileName);//设置画布的背景图片            }        }

保存文件

对保存文件对话框的调用

用语句bm.Save(saveFileDialog1.FileName);将画布bm上的内容存在指定位置存为jpg文件,saveFileDialog1.FileName为文件的名称

 private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)        {            saveFileDialog1.Filter = "JPG File(*.jpg)|*.JPG";//设置保存的格式为jpg            if(saveFileDialog1.ShowDialog()==System.windows.FORMs.DialogResult.OK)            {                bm.Save(saveFileDialog1.FileName);//直接将bm保存为jpg格式            }           }

清空画布

定义一个bool类型的变量clear用于指示是否将内容清空,当clear值为true时清空画布,否则不清空

为了防止用户操作失误使得内容被清空,加上下面的代码,当用户按下确定键时才将clear改为true,即清空画布

DialogResult r = MessageBox.Show("确定将清空画布内容?", "提示", MessageBoxButtons.OKCancel);            if (r.ToString() == "OK") clear = true;

清空画布即用一张白色的画布覆盖之前全部内容

TempData.p.Clear(Color.White);panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));//重新绘制画板

清空画布完整代码

private void 清空ToolStripMenuItem_Click(object sender, EventArgs e)        {            DialogResult r = MessageBox.Show("确定将清空画布内容?", "提示", MessageBoxButtons.OKCancel);            //DialogResult用于指示对话框中的返回值            //后者返回值为OK、Cancel、Yes、No是由具体规定而定的            if (r.ToString() == "OK") clear = true;//ToString()用于将值转化为其等价的字符串形式            if (clear)            {                TempData.p.Clear(Color.White);                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));//重新绘制画板                clear = false;            }        }

上述内容就是使用C#怎么实现一个简易画图板,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 使用C#怎么实现一个简易画图板

本文链接: https://www.lsjlt.com/news/271342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作