基于 C# WinForm 字体编辑器开发记录:从基础到进阶

目录

基础版本实现

进阶版本改进

字体设置窗体增强

主窗体改进

功能对比


项目在本文章的绑定资源中免费的,0积分就可以下载哦~

在 Windows Forms 应用开发中,字体编辑功能是许多文本处理软件的基础功能。本文将分享一个简易字体编辑器的开发过程,从基础版本到进阶版本的实现思路。

基础版本实现

基础版本的字体编辑器包含两个窗体:主窗体 (Form1) 和字体设置窗体 (Form2)。

主窗体主要包含一个文本框和一个 "样式设定" 按钮,代码结构如下:

// Form1.cs
private void button1_Click(object sender, EventArgs e)
{Form2 f2 = new Form2();if (f2.ShowDialog() == DialogResult.OK){textBox1.Font = new Font(f2.comboBox1.SelectedItem.ToString(), (float)f2.numericUpDown1.Value);}
}

字体设置窗体包含字体选择下拉框、字体大小数字框和确定 / 取消按钮:

// Form2.cs
public Form2()
{InitializeComponent();//设置初始值comboBox1.SelectedIndex = 0;//下拉框初始索引numericUpDown1.Value = 12;//数字框初始值
}

在设计器中,我们为 Form2 添加了必要的控件,并设置了按钮的 DialogResult 属性,使窗体能够正确返回用户操作结果。

进阶版本改进

进阶版本在基础版本上增加了更多功能,主要改进包括:

  1. 使用 RichTextBox 替代 TextBox,支持部分文本字体修改
  2. 增加右键菜单触发字体设置
  3. 增加粗体和斜体样式选择
  4. 动态加载系统字体列表

字体设置窗体增强

进阶版的 Form2 增加了粗体和斜体复选框,并提供了 SelectedFont 属性方便主窗体获取设置:

// 进阶版Form2.cs
public Font SelectedFont { get; private set; }public Form2()
{InitializeComponent();// 初始化字体列表foreach (var fontFamily in FontFamily.Families){FontcomboBox.Items.Add(fontFamily.Name);}if (FontcomboBox.Items.Count > 0){FontcomboBox.SelectedIndex = 0;}
}private void button1_Click(object sender, EventArgs e)
{// 获取用户选择的字体string selectedFontName = FontcomboBox.SelectedItem as string;FontFamily selectedFamily = FontFamily.Families.FirstOrDefault(f => f.Name == selectedFontName);float fontSize = (float)fontSizeNumericUpDown.Value;// 处理字体样式FontStyle style = FontStyle.Regular;if (boldCheckBox.Checked)style |= FontStyle.Bold;if (italicCheckBox.Checked)style |= FontStyle.Italic;SelectedFont = new Font(selectedFamily, fontSize, style);button1.DialogResult = DialogResult.OK;
}

主窗体改进

主窗体使用 RichTextBox 并通过右键菜单触发字体设置:

// 进阶版Form1.cs
private void 更改字体ToolStripMenuItem_Click(object sender, EventArgs e)
{Form2 form2 = new Form2();if (form2.ShowDialog() == DialogResult.OK){// 检查是否有选中的文本if (richTextBox1.SelectionLength > 0){// 只修改选中部分的字体richTextBox1.SelectionFont = form2.SelectedFont;}else{// 没有选中内容则修改整个文本框字体richTextBox1.Font = form2.SelectedFont;}MessageBox.Show("字体修改成功!", "提示");}
}

功能对比

功能基础版本进阶版本
文本控件TextBoxRichTextBox
字体选择固定列表系统字体列表
样式支持仅字体和大小字体、大小、粗体、斜体
部分文本修改不支持支持
触发方式按钮右键菜单

通过这个字体编辑器的开发,我们可以看到从简单到复杂功能的演进过程,以及 Windows Forms 控件的灵活应用。RichTextBox 控件提供的选择文本操作功能,为实现部分文本样式修改提供了便利。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基本使用和Java程序部署(含 JDK 与 MySQL)

文章目录Linux 背景知识Linux 基本使用Linux 常用的特殊符号和操作符Linux 常用命令文本处理与分析系统管理与操作用户与权限管理文件/目录操作与内容处理工具Linux系统防火墙Shell 脚本与实践搭建 Java 部署环境apt(Debian/Ubuntu 系的包管理利器)介绍安…

抗辐照CANFD通信芯片在高安全领域国产化替代的研究

摘要:随着现代科技的飞速发展,高安全领域如航空航天、卫星通信等对电子设备的可靠性与抗辐照性能提出了极高的要求。CANFD通信芯片作为数据传输的关键组件,其性能优劣直接关系到整个系统的稳定性与安全性。本文聚焦于抗辐照CANFD通信芯片在高…

Mybatis 源码解读-SqlSession 会话源码和Executor SQL操作执行器源码

作者源码阅读笔记主要采用金山云文档记录的,所有的交互图和代码阅读笔记都是记录在云文档里面,本平台的文档编辑实在不方便,会导致我梳理的交互图和文档失去原来的格式,所以整理在文档里面,供大家阅读交流. 【金山文档…

Java集合类综合练习题

代码 import java.util.*; class ScoreRecord {private String studentId;private String name;private String subject;private int score;public ScoreRecord(String studentId, String name, String subject, int score) {this.studentId studentId;this.name name;this.s…

秒懂边缘云|1分钟了解边缘安全加速 ESA

普通开发者如何搭建安全快速的在线业务才能性价比最高 ?阿里云现已为开发者推出免费版边缘安全加速 ESA,1 个产品就能把 CDN 缓存 API 加速 DNS WAF DDoS 防护全部搞定,还支持边缘函数快速部署网站和 AI 应用,性价比拉满。 1…

数据结构:串、数组与广义表

📌目录🔤 一,串的定义🌰 二,案例引入场景1:文本编辑器中的查找替换场景2:用户手机号验证📚 三,串的类型定义、存储结构及其运算(一)串的抽象类型定…

服务器路由相关配置Linux和Windows

服务器路由相关配置Linux和Windowscentos路由系统核心概念传统工具集(命令)iproute2 工具集(推荐)NetworkManager 工具路由配置文件体系高级路由功能策略路由多路径路由路由监控工具系统级路由配置启用IP转发路由守护进程路由问题诊断流程Windows 路由Wi…

Spring Boot启动事件详解:类型、监听与实战应用

1. Spring Boot启动事件概述1.1 什么是Spring Boot启动事件在Spring Boot的应用生命周期中,从main方法执行到应用完全就绪,期间会发生一系列事件(Event)。这些事件由Spring Boot框架在特定时间点触发,用于通知系统当前…

Python闭包详解:理解闭包与可变类型和不可变类型的关系

一、定义闭包(Closure) 指的是一个函数对象,即使其外部作用域的变量已经不存在了,仍然能访问这些变量。简单来说,闭包是由函数及其相关的环境变量组成的实体。def outer():x 10def inner():print(x)return innerf ou…

BotCash:GPT-5发布观察 工程优化的进步,还是技术突破的瓶颈?

BotCash:GPT-5发布观察 工程优化的进步,还是技术突破的瓶颈? 在GPT-4以多模态能力震撼业界的一年后,GPT-5的亮相显得有些“平静”。当人们期待着又一场颠覆性技术革命时,这场发布会更像是给大模型技术按下了“精细打磨…

AJAX学习(2)

目录 一.XMLHttpRequest 二.XMLHttpRequest——查询参数 三.案例——地区查询 四.XMLHttpRequest_数据提交 五.Promise 六.Promise三种状态 七.PromiseeeXHR获取省份列表(案例) 八.封装-简易axios-获取省份列表 九.封装-简易axios-获取地区列表 …

解决 pip 安装包时出现的 ReadTimeoutError 方法 1: 临时使用镜像源(单次安装)

解决 pip 安装包时出现的 ReadTimeoutError 当您在使用 pip 安装 Python 包时遇到 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out. 错误时,这通常是由于网络问题导致的连接超时。P…

Linux下使用Samba 客户端访问 Samba 服务器的配置(Ubuntu Debian)

在 Linux 系统中,Samba 提供了与 Windows 系统文件共享的便利方式。本文将详细介绍在 Ubuntu 和 Debian 系统下如何安装 Samba 客户端、访问共享资源,并实现远程目录挂载和开机自动挂载。 文章参考自(感谢分享):https…

解决dedecms文章默认关键字太短的问题

在管理文章或软件的时候,大家在添加关键字和内容摘要的时候,是不是对这样的情况感到比较的郁闷,我的关键字设定的明明非常的好,可是添加或修改后,会被无缘无故的截去很多,想必大家也都非常的明白&#xff0…

K8s-kubernetes(二)资源限制-详细介绍

K8s如何合理规定对象资源使用 基本概念 Kubernetes中,占用资源的最小单元为单个PodKubernetes中,资源占用主要针对服务器的CPU、内存 为什么要做资源限制 对于Kubernetes集群而言,所有Pod都会占用K8s集群所在服务器的资源,如果不做…

量子神经网络:从NISQ困境到逻辑比特革命的破局之路

——解析2025千比特时代开发者的机遇与行动框架 引言:量子计算的“20比特魔咒”与千比特悖论 当开发者被建议“避免在>20量子比特电路训练”时,富士通却宣布2025年实现10,000物理比特系统。这一矛盾揭示了量子计算从NISQ时代向FTQC时代跃迁的核心逻辑:千比特突破非为直接…

react+vite-plugin-react-router-generator自动化生成路由

前言:react项目实际使用中有很多提升性能与功能的插件,今天来说一说vite里面提供的vite-plugin-react-router-generator,他主要提供了自动生成路由的功能,配合我们的loadable/component可以实现路由的懒加载与统一管理。1、实现效…

服务器查看 GPU 占用情况的方法

在 Linux 系统中查看 GPU 占用情况,主要取决于你的 GPU 类型(NVIDIA/AMD),以下是常用方法: 一、NVIDIA GPU(最常用,如 RTX 系列、Tesla 系列) 使用 NVIDIA 官方工具 nvidia-smi&…

【Docker实战进阶】Docker 实战命令大全

Docker 实战命令大全 Docker 实战场景,以 Nginx 为核心示例,梳理容器生命周期、镜像管理、网络配置、数据持久化及 Compose 编排的核心命令与最佳实践。 一、容器生命周期管理 1. 基础生命周期命令 docker run - 创建并启动容器 核心功能:基于…

PyCharm 2025.2:面向工程师的 AI 工具

引言 随着人工智能技术的快速发展,AI 工程师对开发工具的需求也在不断提升。PyCharm 2025.2 版本带来了革命性的 AI 工具包,将 AI 开发所需的实验、调试、评估和部署功能原生集成到 IDE 中。这一重大更新不仅提升了开发效率,也为 AI 工程师提…