网站首页 > 文章精选 正文
C#语言编程案例-颜色码数制转换(人教版《信息技术》必修第1册P17例题)
做完的软件效果
案例来源介绍
本案例来自于人民教育出版社《信息技术》第17页的1道例题,题干部分如下:
实践活动:颜色码的数制转换
在计算机中,RGB(Red,Green,Blue)颜色值可以表示为十六进制颜色码。例如,颜色值RGB(64,224,208)可记为#40E0D0,其中表示红色的64,表示绿色的244和标识蓝色的208分别对应十六进制数40H、E0H、D0H。
1.将#9400D3、#D2B48C表示成相对应的RGB颜色值
2.使用计算器程序,验证上述结果。
本文对该题目进行了一下修改,利用C#代码,通过改变RGB数字来更改颜色,并且在窗体进行自动化展示。
我之前用VBA编程的方法,已经在Access数据库里实现过这个过程,可以参见我之前发的文章。
Access数据库编程案例-颜色码数制转换(人教版《信息技术》必修第一册P17例题,基于VBA)
我用C#语言把操作代码直接做成了一个软件案例,做成了一个可以跑在Windows系统下的exe可执行文件。
今天我把本案例的设计过程、代码的逻辑写成一篇技术文案,供大家参考。
本次分享分为以下3个部分:1.需求分解;2.代码层次;3.代码讲解。
1.需求分解
本案例要完成的任务是:自动化的、直观地演示在不同RGB值下的窗体颜色,以及将10进制RGB数字转化为16进制数字。
主要需求分解如下:
(1)窗体和控件
本案例要做一个C#窗体,在窗体上设置3个文本框,分别控制RGB的3种颜色,每当更改数字的值就更改背景的颜色。
(2)窗体背景和图片颜色
本案例窗体背景和宇哥头像背景的颜色,要随着文本框中数字的改变而改变。
(3)自动化
用最简洁的方法,尽量少的控件,用最直观的方式演示颜色变化效果。防止输入0-255之外的数字报错,低于0的数字设为0,大于255的数字设为255。
2.代码层次
本案例的所有C#代码分为核心代码和调用代码。这样做的好处是比较节省空间,层次比较分明,看得比较清晰。
(1)核心代码
核心代码功能包括两项:
更改文本框里的RGB值,然后窗体背景和宇哥头像背景的颜色也随之自动更改。
更改文本框里的RGB值,然后10进制数字自动转化为16进制数字。
这两段代码分别放在一个子过程private void里,需要的时候进行调用。
(2)调用代码
调用代码的含义就是在需要的时候运行核心代码。
本案例只要更改文本框的数字就直接调用核心代码。
如果不采用核心代码和调用代码分开的编程模式,代码会比较长还比较乱,尤其不利于操作比较复杂的调用过程。
C# 语言实现自动化的过程比VBA要容易一些。
3.代码讲解
本节讲解一下核心代码的逻辑和调用代码。
(1)核心代码
颜色变换代码是本案例的核心,是第1段核心代码。本段代码全文如下:
private void UpdateRectangleColor()
{
int redValue, greenValue, blueValue;
// 从文本框获取RGB值
int.TryParse(textBox1.Text, out redValue);
int.TryParse(textBox2.Text, out greenValue);
int.TryParse(textBox3.Text, out blueValue);
// 将RGB值限制在0到255之间
redValue = Math.Max(0, Math.Min(255, redValue));
greenValue = Math.Max(0, Math.Min(255, greenValue));
blueValue = Math.Max(0, Math.Min(255, blueValue));
// 更新窗体的背景颜色
this.BackColor = System.Drawing.Color.FromArgb(redValue, greenValue, blueValue);
}
这段代码的含义如下:
先设定3个变量RedValue、GreenValue和BlueValue,分别代表红色、绿色和蓝色。
3个变量取值分别来自于三个文本框textBox1、textBox2和textBoxt3。
需要确保文本框里输入的数字要在0和255之间,如果超出这个范围的数字,数值要么是0要么是255。
窗体背景的颜色要随着数字更改而变化。
以下是第2段核心代码,10进制转化为16进制的代码:
private void ConvertToHex()
{
int RedValue;
int GreenValue;
int BlueValue;
string HexColor;
// 从文本框中获取10进制RGB值,如果为空则默认为0
RedValue = int.TryParse(textBox1.Text, out int redResult) ? redResult : 0;
GreenValue = int.TryParse(textBox2.Text, out int greenResult) ? greenResult : 0;
BlueValue = int.TryParse(textBox3.Text, out int blueResult) ? blueResult : 0;
// 确保RGB值不大于255
RedValue = Math.Min(RedValue, 255);
GreenValue = Math.Min(GreenValue, 255);
BlueValue = Math.Min(BlueValue, 255);
// 将RGB值转换为16进制
HexColor = #34;{RedValue:X2}{GreenValue:X2}{BlueValue:X2}";
// 在Text4中显示16进制颜色值
textBox4.Text = HexColor;
}
这段代码的含义如下:除了定义红绿蓝3个颜色的变量,再定义第4个变量HexColor。
X2 是C#中的格式说明符,用于将整数格式化为两位十六进制数字。这确保了每个分量都用两个十六进制数字表示,即使值小于16(例如,10会表示为"0A")。
(2)调用代码
调用代码是案例自动化的一部分,不可或缺,完整的调用代码如下:
private void textBox1_TextChanged(object sender, EventArgs e)
{
UpdateRectangleColor();
ConvertToHex();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
UpdateRectangleColor();
ConvertToHex();
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
UpdateRectangleColor();
ConvertToHex();
}
这三段代码的含义:更改3个textBox的时候,自动直接调用核心代码。
很简单很清楚有木有。
代码编写完毕之后,点击运行,生成exe文件。
C#生成的exe文件,可以在windows条件下随便打开、随便迁移和复制粘贴。
C#的exe生成过程非常的容易,操作非常简便,比Java、C++都要方便很多。这个功能是C#编程语言最大的优势。
总结
本案例重要知识点有3个:
1.掌握C#的颜色更改的技术。
2.10进制转16进制的X2使用。
3.窗体自动化技术和exe生成技术。
用数字控制窗体背景颜色,C#编程的技术本身不难,知识点不多。
但是需要重视细节的把控,另外也要理解模块化编程、以及把核心代码和调用代码分开的好处。
想学习Access数据库请私聊。
--The End--
猜你喜欢
- 2025-05-22 一个基于C#开发的Excel转Json工具
- 2025-05-22 在C++中,如何避免出现Bug?
- 2025-05-22 C#内插字符串:一种让代码更美观的方式
- 2025-05-22 Google Docs 为代码块添加了14种新的编程语言支持
- 2025-05-22 Cobalt Strike 4.8 用户指南-第五节-获取初始访问
- 2025-05-22 ASP.NET Core Web API 中的 JSON 修补程序
- 2025-05-22 C#知识|对象序列化与反序列化
- 2025-05-22 全网最全95道MongoDB面试题1万字详细解析
- 2025-05-22 透视CobaltStrike(二)—从CS到免杀框架Veil
- 2025-05-22 从C#语言开发者转Golang开发的入门教程
- 05-22离线在docker镜像方式部署ragflow0.17.2
- 05-22【Docker 新手入门指南】第七章:镜像使用
- 05-22使用Docker制作OpenJDK镜像
- 05-22使用Dockerfile build镜像
- 05-22一文详解Docker轻量级虚拟化,镜像和容器
- 05-22三 docker 镜像命令
- 05-22Docker-使用Dockerfile 定制镜像
- 05-22Linux日常小技巧Docker打包
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)