Winform下的画板

news/2024/9/23 19:24:56

1. Winform如何实现简单绘图

  • 如果想要自己画一个圆,矩形或者其他图形,可以使用控件或窗体自带的Paint事件,在事件中引用Graphics对象;
  • 也可以使用某个窗体或者控件的CreateGraphics方法
  • 需要引用using System.Drawing.Drawing2D;(要画3D就用DirectX)

2. 使用Form1窗体Paint事件

  • 步骤:
    • 先画一个画板 Graphics g = e.Graphics;
    • 再拿一支笔Pen p = new Pen(Color.Blue, 2);
    • 然后就可以开始画画了,代码及效果如下:
 private void Form1_Paint(object sender, PaintEventArgs e){//创建一个winform提供的画板Graphics g = e.Graphics;//需要一支笔Pen p = new Pen(Color.Blue, 2);//开始画画g.DrawLine(p, 10, 10, 100, 100);//在画板上画直线,起始坐标为(10,10),终点坐标为(100,100)g.DrawRectangle(p, 10, 10, 100, 100);//在画板上画矩形,起始坐标为(10,10),宽为100,高为100g.DrawEllipse(p, 10, 10, 100, 100);//在画板上画圆,起始坐标为(10,10),外接矩形的宽为100,高为100}

3.使用CreateGraphics方法

  • 在按钮的Click事件中做一个画板,使用CreateGraphics方法,代码及效果如下:
 private void button1_Click(object sender, EventArgs e){Pen p = new Pen(Color.Blue, 5);//设置笔的粗细为,颜色为蓝色Graphics g = this.CreateGraphics();//画虚线p.DashStyle = DashStyle.Dot;//定义虚线的样式为点g.DrawLine(p, 10, 200, 200, 200);//自定义虚线p.DashPattern = new float[] { 2, 1 };//设置短划线和空白部分的数组g.DrawLine(p, 10, 210, 200, 210);//画箭头,只对不封闭曲线有用p.DashStyle = DashStyle.Solid;//恢复实线p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头g.DrawLine(p, 10, 220, 200, 220);//g.Dispose();//p.Dispose();Rectangle rect = new Rectangle(300, 10, 50, 50);//定义矩形,参数为起点横纵坐标以及其长和宽//单色填充SolidBrush b1 = new SolidBrush(Color.Blue);//定义单色画刷          g.FillRectangle(b1, rect);//填充这个矩形//字符串g.DrawString("字符串", new Font("宋体", 10), b1, new PointF(390, 10));//用图片填充TextureBrush b2 = new TextureBrush(Image.FromFile(@"C:\Users\xiaocuncun\Desktop\屏幕截图 2024-09-05 222652.png"));rect.Location = new Point(300, 70);//更改这个矩形的起点坐标rect.Width = 200;//更改这个矩形的宽来rect.Height = 200;//更改这个矩形的高g.FillRectangle(b2, rect);//用渐变色填充rect.Location = new Point(300, 290);LinearGradientBrush b3 = new LinearGradientBrush(rect, Color.Yellow, Color.Black, LinearGradientMode.Horizontal);g.FillRectangle(b3, rect);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/57078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

STM32学习笔记——Keil uVision5建项目

新建文件夹——用于存放工程及工程管理 新建文件夹用于存放整个工程打开“stm32-project”文件夹,新建一些文件夹用于工程源代码的分类这些文件夹都是自己建的用于不同类型代码存放,文件夹个数,命名都因人而异。(后续所有文件放在“stm32-project”中也行,不嫌乱的话) Ha…

Jenkins - 触发器

触发方式 jenkins自带的job触发方式Generic Webhook Trigger插件 在需要外界其他系统触发Jenkins任务的场景,通常使用Generic Webhook Trigger插件来配置 Jenkins 触发器 Generic Webhook Trigger 插件允许使用 Webhook将外部系统与 Jenkins 集成。 通过配置 Webhook,在特定事…

[场景设计]短网址服务

如何设计一个短网址服务(TinyURL)? 使用场景(Scenario) 微博和Twitter都有140字数的限制,如果分享一个长网址,很容易就超出限制,发不出去。短网址服务可以把一个长网址变成短网址,方便在社交网络上传播。 需求(Needs) 很显然,要尽可能的短。长度设计为多少才合适呢? 短网…

增强 softmax 函数的稳定性

概述 oftmax函数的表达式 $ \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} $,但在计算机的运算上有一定的缺陷。这个缺陷就是溢出问题。 softmax函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如,e^{10} 的值会超过20000, e^{100…

大规模MIMO通信系统信道估计matlab性能仿真,对比LS,OMP,MOMP以及CoSaMP

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):2.算法涉及理论知识概要大规模MIMO(Multiple-Input Multiple-Output)通信系统因其能够显著提高无线通信系统的容量和频谱效率而受到广泛关注。在这样的系统中,基站配备了大量的天线(通常数百个),而用户…

docker部署mysql8主从

一、拉取mysql镜像docker pull mysql 二、创建容器# 主库docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql# 从库 docker run -itd -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave mysql 三、配置主库[mysqld]## 同一…

IDGenRec论文阅读笔记

IDGenRec: LLM-RecSys Alignment with Textual ID Learning论文阅读笔记 Abstract ​ 为了使 LLM 与推荐需求更好地结合,我们提出了 IDGenRec,使用人类语言标记将每个项目表示为唯一、简洁、语义丰富、平台无关的文本 ID。这是通过与基于 LLM 的推荐器一起训练文本 ID 生成器…

基于鱼群算法的散热片形状优化matlab仿真

1.课题概述使用浴盆曲线进行空隙外形的模拟,然后通过优化,计算得到最优的浴盆曲线的各个参数,从而计算出最优的R值。浴盆曲线函数如下所示:从上面的仿真结果可知,直接对目标函数进行优化,仿真速度非常慢,这里我们使用浴缸曲线结合鱼群算法进行优化。从而得到最佳的孔隙度…