基于 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
英文地址,請注明出處:http://en.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 工程師提…