C#绘制带圆角的矩形

时间: 2025-02-07 19:25:53 浏览: 24

C# 中绘制带圆角的矩形

在 C# 中可以通过 System.Drawing 命名空间中的类来实现带有圆角的矩形绘制。下面是一个简单的例子,展示了如何创建并绘制一个具有指定半径圆角的矩形。

using System;
using System.Drawing;
using System.Windows.Forms;

public class RoundedRectForm : Form {
    protected override void OnPaint(PaintEventArgs e) {
        base.OnPaint(e);
        
        Graphics g = e.Graphics;
        Pen pen = new Pen(Color.Black);

        Rectangle rect = new Rectangle(50, 50, 200, 100);
        int cornerRadius = 20; // 圆角度数
        
        using (GraphicsPath path = GetRoundedRectangle(rect, cornerRadius)) {
            g.DrawPath(pen, path); // 绘制路径即为圆角矩形
        }
    }

    private static GraphicsPath GetRoundedRectangle(Rectangle bounds, int radius) {
        var path = new GraphicsPath();
        if (radius <= 0 || Math.Min(bounds.Width, bounds.Height) / 2 < radius) {
            path.AddRectangle(bounds);
            path.CloseFigure();
            return path;
        } else {
            Size size = new Size(radius, radius);
            
            Point topLeft = new Point(bounds.Left, bounds.Top);
            Point topRight = new Point(bounds.Right - radius, bounds.Top);
            Point bottomLeft = new Point(bounds.Left, bounds.Bottom - radius);
            Point bottomRight = new Point(bounds.Right - radius, bounds.Bottom - radius);

            path.AddArc(new Rectangle(topLeft, size), 180, 90);
            path.AddLine(new Point(bounds.Left + radius, bounds.Top), new Point(bounds.Right - radius, bounds.Top));
            path.AddArc(new Rectangle(topRight.X, topLeft.Y, size.Width, size.Height), 270, 90);
            path.AddLine(new Point(bounds.Right, bounds.Top + radius), new Point(bounds.Right, bounds.Bottom - radius));
            path.AddArc(new Rectangle(bottomRight.X, bottomRight.Y-size.Height, size.Width, size.Height), 0, 90);
            path.AddLine(new Point(bounds.Right - radius, bounds.Bottom), new Point(bounds.Left + radius, bounds.Bottom));
            path.AddArc(new Rectangle(bottomLeft.X, bottomLeft.Y-radius, size.Width, size.Height), 90, 90);
            path.CloseFigure();

            return path;
        }
    }
}

此代码定义了一个自定义窗体 (RoundedRectForm) 并重写了其 OnPaint 方法,在该方法内使用了 GetRoundedRectangle() 函数生成一个圆形角落的图形路径,并通过调用 g.DrawPath() 来实际渲染这个形状到屏幕上[^1]。

向AI提问 loading 发送消息图标

相关推荐

zip
大学生入口

大家在看

recommend-type

Noise-Pollution-Monitoring-Device

基于物联网的噪声污染监测系统1 以下存储库包含在 IOT 的帮助下设计噪声污染监测系统所需的文件。 它使用 firebase 作为实时服务器,在 Python 脚本的帮助下上传数据,该脚本在虚拟端口的帮助下跟踪 Proteus 软件中设计的原型的读数。 部署 Web 应用程序以使用户了解正在上传的数据类型。 该存储库包括 Arduino hex 文件、Python 脚本、HTML CSS JS 代码、Proteus 电路软件原型和上述项目的报告。
recommend-type

Allegro16.6约束规则设置详解-SCC

Allegro16.6约束规则设置详解_SCCAllegro16.6约束规则设置详解_SCCAllegro16.6约束规则设置详解_SCCAllegro16.6约束规则设置详解_SCC
recommend-type

Liouville-von-Neumann-Matlab:使用 Liouville von Neumann 方程(密度矩阵传播)的量子力学自旋系统演化示例-matlab开发

此脚本通过密度矩阵的传播执行具有代表性的刘维尔·冯·诺依曼模拟。 用于模拟的量子力学系统由三个自旋组成:电子 (A,B) 和原子核 (C)。 只有一个电子通过“hfc”指定的超精细耦合与原子核 (AC) 耦合。 该系统还受到由“B0”指定的外部磁场的影响。 计算针对“T”指定的时间点运行。 该代码旨在用于了解自旋化学的基础知识,而不是用作模拟工具。 它被大量评论,要使用它,您应该逐行阅读以了解它的作用。
recommend-type

antelope.zip

SimSwap项目使用了insightface 来做脸部识别和对其,进行图像预处理。 需要下载antelope.zip文件解压到./insightface_func/models 目录中。
recommend-type

Teradata FS-LDM模型V10.0版本的参考手册 BOOK-1和2.rar

Teradata 金融数据模型FS-LDM。它是一个成熟产品,在一个集成的模型内支持保险、银行及证券,包含十大主题:当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道。

最新推荐

recommend-type

C#中窗体Form的美化窗体圆角的处理

然而,API函数`CreateRoundRectRgn`提供了更简单且效果更好的方式来创建圆角矩形。这个函数来自`gdi32.dll`库,可以创建一个具有指定圆角半径的矩形区域。我们需要在窗体的OnSizeChanged事件中调用该函数,确保窗体...
recommend-type

C#水晶按钮代码.doc

5. **GraphicsPath**:在`GetGraphicsPath`方法中,`GraphicsPath`对象用于创建一个路径,这在绘制圆角矩形时非常有用。`AddArc`方法添加了一个弧线段,用于创建圆角的效果。 6. **图形绘制(Drawing)**:`User...
recommend-type

PLC与WinCC实现三部十层电梯协同控制及优化技巧

内容概要:本文详细介绍了参与西门子杯比赛中关于三部十层电梯系统的博图V15.1程序设计及其WinCC画面展示的内容。文中不仅展示了电梯系统的基本架构,如抢单逻辑、方向决策、状态机管理等核心算法(采用SCL语言编写),还分享了许多实际调试过程中遇到的问题及解决方案,例如未初始化变量导致的异常行为、状态机遗漏空闲状态、WinCC画面动态显示的挑战以及通信配置中的ASCII码解析错误等问题。此外,作者还特别提到一些创意性的设计,如电梯同时到达同一层时楼层显示器变为闪烁爱心的效果,以及节能模式下电梯自动停靠中间楼层的功能。 适合人群:对PLC编程、工业自动化控制、电梯调度算法感兴趣的工程技术人员,尤其是准备参加类似竞赛的学生和技术爱好者。 使用场景及目标:适用于希望深入了解PLC编程实践、掌握电梯群控系统的设计思路和技术要点的人士。通过学习本文可以更好地理解如何利用PLC进行复杂的机电一体化项目的开发,提高解决实际问题的能力。 其他说明:文章风格幽默诙谐,将严肃的技术话题融入轻松的生活化比喻之中,使得原本枯燥的专业知识变得生动有趣。同时,文中提供的经验教训对于从事相关领域的工作者来说非常宝贵,能够帮助他们少走弯路并激发更多创新思维。
recommend-type

数据库第一章选择题练习(1).docx

数据库第一章选择题练习(1).docx
recommend-type

spring-ai-pdf-document-reader-1.0.0-M7.jar中文文档.zip

# 【spring-ai-pdf-document-reader-1.0.0-M7.jar中文文档.zip】 中包含: 中文文档:【spring-ai-pdf-document-reader-1.0.0-M7-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-pdf-document-reader-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-pdf-document-reader-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-pdf-document-reader-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-pdf-document-reader-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-pdf-document-reader-1.0.0-M7.jar中文文档.zip,java,spring-ai-pdf-document-reader-1.0.0-M7.jar,org.springframework.ai,spring-ai-pdf-document-reader,1.0.0-M7,org.springframework.ai.reader.pdf,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,pdf,document,reader,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spri
recommend-type

易语言实现空白文本和字节集模块的嵌入汇编处理

易语言是一种简单易学的编程语言,它的语法结构与汉语接近,适合初学者快速掌握编程知识。易语言的特点是支持汉字编程,这让中文用户可以更容易地理解程序逻辑和结构。在易语言中嵌入汇编代码是一种高级编程技巧,可以用来提高程序运行的效率,尤其是在对性能要求较高的场景下。 标题中提到的“嵌入汇编取空白文本和字节集模块”是指在易语言程序中,通过嵌入汇编语言代码来实现对文本和字节集(字节序列)的处理,例如提取空白文本或生成空白字节集。 描述中提到的源码是指含有具体实现这一功能的易语言代码。源码中涉及的API(应用程序编程接口)包括API_GetProcessHeap、API_HeapAlloc、API_FillMemory、API_MessageBox 和 API_GetActiveWindow,这些API分别对应于获取进程堆、分配堆内存、填充内存、消息框显示以及获取活动窗口句柄的功能。 以下是详细的知识点: 1. 易语言编程基础:易语言是一种基于中文的编程语言,它提供了一套完整的开发环境,包括集成开发环境(IDE)、编译器、调试器等。易语言适合快速开发Windows平台下的应用程序。 2. 嵌入汇编技术:在易语言中嵌入汇编代码可以通过关键字“汇编”来实现。这种技术允许开发者直接使用低级语言的优势来优化关键代码段的性能,同时仍然保留易语言其他高级特性的便利性。 3. 字符串处理:在易语言中,空白文本指的是那些不包含任何有效字符的字符串。处理空白文本通常涉及检查字符串是否为空或仅包含空格、制表符等。取空白文本可能涉及到遍历字符串并移除这些空白字符。 4. 字节集处理:字节集通常用于表示二进制数据。易语言中的字节集可以看作是一个字节数组。取空白字节集可能意味着创建一个指定大小的字节集,其中所有元素都是零或特定的空白值。 5. API_GetProcessHeap:这个API用于获取当前进程的堆句柄,该堆由操作系统管理,可以用于动态分配内存。 6. API_HeapAlloc:此API用于从前面通过API_GetProcessHeap获取的进程堆中分配一块内存。在处理字节集时,往往需要动态地分配内存空间。 7. API_FillMemory:此API用于填充指定内存区域的数据。在创建空白字节集时,可以利用API_FillMemory将内存区域全部填充为零或其他指定的空白值。 8. API_MessageBox:此API用于显示一个消息框,允许程序向用户显示信息、警告、错误消息等。在嵌入汇编取空白文本和字节集模块中,可能会在遇到错误情况时使用消息框提示用户。 9. API_GetActiveWindow:此API用于获取当前活跃窗口的句柄。它在程序需要与用户交互时非常有用,例如在需要用户手动确认某些操作时。 理解上述知识点后,可以开始研究和分析易语言嵌入汇编取空白文本和字节集模块源码的具体实现细节。开发者可以利用易语言提供的这些功能和API来编写高效的代码,同时也需要对汇编语言有一定的了解,以便能够正确地嵌入和使用汇编代码。在实际开发过程中,需要注意内存的申请与释放,避免内存泄漏等问题,确保程序的稳定性和效率。
recommend-type

集成电路制造中的互扩散效应分析:理论与实验的融合

# 摘要 互扩散效应是影响集成电路性能的关键因素之一,涉及材料中的物质如何通过扩散过程影响彼此的分布和浓度。本文首先概述了互扩散效应的基本理论,
recommend-type

最小二乘法是什么

<think>嗯,用户问的是最小二乘法,我得先理清楚这个概念。首先,最小二乘法是统计学中的一种方法,用来求解线性回归问题。对吧?不过得确保自己理解正确,不能出错。 首先,要解释最小二乘法的目的,应该是找到一条直线(或者更一般的曲线),使得这条曲线与数据点之间的误差平方和最小。这点没错,记得误差是实际值和预测值之差,平方之后求和,最小化这个总和。 然后,可能需要提到它的应用场景,比如线性回归,参数估计这些。用户可能想知道为什么叫“最小二乘”,是不是因为平方的关系?是的,平方就是“二乘”的意思,中文里“二乘”可能是指平方,所以这个名字挺贴切的。 接下来,可能需要数学公式的说明。这里要注意系统
recommend-type

实现增加和修改共用页面的Struts2技术实践

在现代的Web应用程序开发中,用户界面的灵活性和代码的可重用性是两个重要的考虑因素。为了减少代码冗余并提高开发效率,经常会采用一些设计模式和策略。其中一种方法是将数据的增加和修改操作放在同一个页面进行处理,这样的设计不仅节省了页面编写的劳动量,还提高了用户体验。在本知识点中,我们将具体探讨在使用Struts2框架和JSP技术时,如何实现增加和修改共用一个页面的策略。 首先,我们需要了解Struts2框架的基本工作原理。Struts2是一个基于MVC(Model-View-Controller)模式的Web应用框架。它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),以便于分离业务逻辑、用户界面和控制流程。 在实现增加和修改共用页面的场景中,Struts2提供了Action机制,用于处理来自客户端的请求并返回响应。Action中通常包含业务逻辑处理以及与模型的交互,而Action与页面视图的映射则是通过struts.xml配置文件进行声明式控制的。 接下来,让我们深入到具体实现步骤: 1. **共用Action设计**: - 创建一个Action类,用于封装增加和修改操作的公共处理逻辑。 - 在Action类中使用不同的方法来处理增加和修改请求。通常,可以通过ActionContext或者方法的参数来判断是新增操作还是修改操作。 2. **请求参数的处理**: - 在共用的Action类中,根据不同的操作类型,从请求参数中解析出不同的数据,比如新增时,参数可能都是空的或者新创建的数据对象;而修改时,参数则包含了需要更新的数据和对应的标识(如ID)。 - 使用Struts2提供的OGNL(Object-Graph Navigation Language)来访问请求参数,并根据参数决定操作逻辑。 3. **视图页面设计**: - 设计一个JSP页面作为视图,用于展示表单以及提供用户操作界面。 - 在表单中,需要包含一个隐藏字段用于标识是新增还是修改操作。这样在表单提交时,可以携带此标识信息到Action进行相应的逻辑处理。 4. **struts.xml配置**: - 在struts.xml中配置Action,定义不同请求与Action方法之间的映射关系。 - 配置result元素,使得根据不同的操作类型返回不同的视图页面,或者在执行完Action方法后进行重定向。 5. **控制流程**: - 当用户访问增加或修改页面时,服务器会根据请求中携带的参数来决定是展示新增表单还是修改表单。 - 用户填写表单并提交后,Action会根据传入的参数判断是增加操作还是修改操作,并进行相应处理。 6. **结果处理**: - 在Action中,执行业务逻辑后,需要定义合适的result来处理操作结果,例如成功时返回到列表页面,失败时返回错误信息到原页面。 总结以上步骤,我们得到了一个完整的“增加和修改共用一个页面”的实现方案。通过这种设计,我们不仅简化了代码量,还保证了操作的灵活性和可维护性。在实际开发中,使用Struts2框架结合JSP技术可以非常有效地实现此功能。重要的是,开发者需要遵循MVC设计模式,合理地组织代码结构,并通过良好的设计使得项目易于理解和维护。
recommend-type

外延工艺改进:提升集成电路制造效率的秘籍

# 摘要 集成电路制造是现代电子工业的基石,而外延工艺作为其核心环节,对于集成电路的性能和质量具有决定性作用。本文综述了集成电路外延工艺的理论基础、实践技术及优化策略,并探讨了制造效率提升的途径。通过对外延层生长机制、技术分类及其质量评估方法的分析,深入讨论了提升外延层均匀性和缩短工艺周期的技术手段。此外,本文还讨论了新兴技术对外延工艺的影响,行业
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部