记录|C#主界面设计【Web风格】

news2024/9/22 21:34:55

目录

  • 前言
  • 一、页面效果
  • 二、布局设计
    • 2.1 左边菜单栏搭建框架
      • Step1. panelMenu :
      • Step2. panelLogo
      • Step3. button模板
      • Step4. 复制button
      • Step5. 微调Button
    • 2.2 界面颜色变换
      • Step1. ThemeColor类
      • Step2. From1.cs
      • Step3. 更换按钮点击颜色效果
    • 2.3 按钮点击事件
    • 2.4 顶部title栏搭建
      • Step1. panelTitleBar
      • Step2. Label
      • Step3. Label
      • Step4. panelLogo的背景变换
    • 2.5 布局效果展示
  • 三、子界面
    • Step1. Panel
    • Step2. 打开新Form的方法
    • Step3. 创建子Form
    • Step4. 子Form中布局
    • Step5. 按钮点击事件
    • Step6. 当前效果
  • 四、子Form细节设置【进阶】
    • Step1. 按钮和主题色同色
    • 效果:
  • 五、关闭按钮
    • Step1. Button
    • Step2. Button点击事件
    • 效果:
  • 六、在HOME添加LOGO【待补充,进阶】
  • 更新时间


前言

学习视频:
[ C# ][Winform]炫酷扁平UI,随机多色彩切换,活动窗口高亮按钮

上面的界面布局是值得学习的,页面间的切换也是不错的。
自己跟着做了下,代码上传了,可以下载【C#主界面设计】


一、页面效果

在这里插入图片描述


二、布局设计

2.1 左边菜单栏搭建框架

Step1. panelMenu :

  • Dock:left
  • BackColor:51,51,76
    在这里插入图片描述

Step2. panelLogo

  • Dock:top
  • BackColor:39,39,58 [偏黑点]
    在这里插入图片描述

Step3. button模板

  • Dock:top
  • FlatStyle:Flat
  • FlatAppearance:
    • BoardSize:0
  • ForeColor:Gainsboro [web中]
  • Image:插入一张.png的icon图片
  • ImageAlign:MiddleLeft
  • TextImageRelation:ImageBeforeText
    在这里插入图片描述

Step4. 复制button

  • 首先,复制黏贴
  • Padding:Left:12
    在这里插入图片描述
    在这里插入图片描述

Step5. 微调Button

  • Font:Microsoft Sans Serif, 11pt
    在这里插入图片描述

2.2 界面颜色变换

Step1. ThemeColor类

在这里插入图片描述
类里面,编写固定的颜色数组,让界面切换的时候,实现页面的颜色变化【代码如下:】

    internal class ThemeColor
    {
        public static List<string> ColorList = new List<string>()
        {
            "#3F51B5",
            "#009688",
            "#FF5722",
            "#607D8B",
            "#FF9800",
            "#9C27B0",
            "#2196F3",
            "#EA676C",
            "#E41A4A",
            "#5978BB",
            "#018790",
            "#0E3441",
            "#00B0AD",
            "#721D47",
            "#EA4833",
            "#EF937E",
            "#F37521",
            "#A12059",
            "#126881",
            "#8BC240",
            "#364D5B",
            "#C7DC5B",
            "#0094BC",
            "#E4126B",
            "#43B76E",
            "#7BCFE9",
            "#B71C46"
        };
    }

Step2. From1.cs

  • 编写颜色变换方法SelectThemeColor()
namespace ZHCHwindows_1
{
    public partial class Form1 : Form
    {
        //Fields
        private Button currentButton;
        private Random random;
        private int tempIndex;
        public Form1()
        {
            InitializeComponent();
            random = new Random();
        }
        //Methods
        private Color SelectThemeColor()
        {
            int index = random.Next(ThemeColor.ColorList.Count);
            //找到与当前界面颜色不同的
            while(tempIndex == index)
            {
                index = random.Next(ThemeColor.ColorList.Count);
            }
            tempIndex = index;
            string color = ThemeColor.ColorList[index];
            return ColorTranslator.FromHtml(color);
        }
    }
}

Step3. 更换按钮点击颜色效果

1)我们为主题选择一个随机颜色(可选,你可以使用单一颜色来突出显示按钮)。
2)我们改变按钮的背景颜色。
3)我们改变按钮的字体颜色。
4)我们改变按钮的字体大小。
最终实现:
在这里插入图片描述

通过激活/突出显示按钮,我们增加了字体缩放效果的大小

        private void ActivateButton(object btnSender)
        {
            if (btnSender != null)
            {
                if (currentButton != (Button)btnSender)
                {
                    DisableButton();
                    Color color = SelectThemeColor();
                    currentButton = (Button)btnSender;
                    currentButton.BackColor = color;
                    currentButton.ForeColor = Color.White;
                    currentButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

                }
            }
        }
        private void DisableButton()
        {
            foreach (Control previousBtn in panelMenu.Controls) {
                if (previousBtn.GetType() == typeof(Button))
                {
                    previousBtn.BackColor = Color.FromArgb(51, 51, 76);
                    previousBtn.ForeColor = Color.Gainsboro;
                    previousBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

                }
            }
        }

2.3 按钮点击事件

这里直接给6个button创建点击事件,在点击事件中调用ActivateButton()
代码如下:【只选其一展示】

        private void btnProducts_Click(object sender, EventArgs e)
        {
            ActivateButton(sender);
        }

此时,左边的菜单栏已经配置完毕:
在这里插入图片描述


2.4 顶部title栏搭建

Step1. panelTitleBar

  • Dock:Top
  • BackColor:0,150,136
    在这里插入图片描述

Step2. Label

  • Name:lblTitle
  • FontColor:White
  • Font:Mongolian Baiti,16pt
  • Anchor:None 【这个能实现,字体随窗口自适应大小】
    在这里插入图片描述

Step3. Label

  • Name: lblMenu
  • FontColor:LightGray
  • Font:Microsoft Sans Serif, 12pt
    在这里插入图片描述

Step4. panelLogo的背景变换

  • 在ThemeColor.cs中增加一个改变颜色亮度方法【代码如下:】
        public static Color ChangeColorBrightness(Color color,double correctionFactor)
        {
            double red = color.R;
            double green = color.G;
            double blue = color.B;

            //correction factor<0,则降低颜色亮度
            if (correctionFactor < 0)
            {
                correctionFactor = 1 + correctionFactor;
                red *= correctionFactor;
                green *= correctionFactor;
                blue *= correctionFactor;
            }
            else
            {
                red = (255-red)*correctionFactor+red; 
                green = (255-green)*correctionFactor+green; 
                blue = (255-blue)*correctionFactor+blue;
            }
            return Color.FromArgb(color.A,(byte)red, (byte)green, (byte)blue);
        }
  • 在Form1.cs中的ActivateButton()方法中调用【代码如下】
        private void ActivateButton(object btnSender)
        {
            if (btnSender != null)
            {
                if (currentButton != (Button)btnSender)
                {
                    DisableButton();
                    Color color = SelectThemeColor();
                    currentButton = (Button)btnSender;
                    currentButton.BackColor = color;
                    currentButton.ForeColor = Color.White;
                    currentButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    // 上方栏的颜色变化
                    panelTitleBar.BackColor = color;
                    panelLogo.BackColor = ThemeColor.ChangeColorBrightness(color,-0.3);
                }
            }
        }

2.5 布局效果展示

在这里插入图片描述


三、子界面

添加子窗体的容器面板

Step1. Panel

  • Name:panelDesktopPane
  • Dock:Fill
    在这里插入图片描述

Step2. 打开新Form的方法

我们创造一个方法,实现在子panel中打开新的Forms

  • 在Form1.cs中,创建打开子Form的方法
        private Form activeForm;
        /// <summary>
        /// 打开子Form
        /// </summary>
        /// <param name="childForm"></param>
        /// <param name="btnSender"></param>
        private void OpenChildForm(Form childForm, object btnSender)
        {
            if(activeForm != null)
            {
                activeForm.Close();
            }
            ActivateButton(btnSender);
            activeForm = childForm;
            childForm.TopLevel = false;
            childForm.FormBorderStyle = FormBorderStyle.None;
            childForm.Dock = DockStyle.Fill;
            this.panelDesktopPane.Controls.Add(childForm);
            this.panelDesktopPane.Tag = childForm;
            childForm.BringToFront();
            childForm.Show();
            //让lblTitle的标题和子Form的标题一样
            this.lblTitle.Text = childForm.Text;
        }

Step3. 创建子Form

  • 添加"窗体(Windows窗体)"【如下图】
    在这里插入图片描述
    在这里插入图片描述

Step4. 子Form中布局

  • 这里为了演示界面跳转的效果,所以布局很随意。【如下图:】
  • 下面的部件,只有图中的四个的Anchor是改变的,其余不用变化。
    在这里插入图片描述
  • 之后创建其余子Form界面【如下图】
    在这里插入图片描述

Step5. 按钮点击事件

  • 刚换点击事件为:页面转换【其中一个的代码如下图:】
        private void btnProducts_Click(object sender, EventArgs e)
        {
            OpenChildForm(new Forms.FormProduct(), sender);
        }

Step6. 当前效果

在这里插入图片描述


四、子Form细节设置【进阶】

Step1. 按钮和主题色同色

  • 在ThemeColor.cs中添加如下代码
        public static Color PrimaryColor { get; set; }
        public static Color SecondaryColor { get; set; }
  • 在Form1.cs中修改ActivativeButton()方法,最后代码如下
        private void ActivateButton(object btnSender)
        {
            if (btnSender != null)
            {
                if (currentButton != (Button)btnSender)
                {
                    DisableButton();
                    Color color = SelectThemeColor();
                    currentButton = (Button)btnSender;
                    currentButton.BackColor = color;
                    currentButton.ForeColor = Color.White;
                    currentButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    // 上方栏的颜色变化
                    panelTitleBar.BackColor = color;
                    panelLogo.BackColor = ThemeColor.ChangeColorBrightness(color,-0.3);
                    //
                    ThemeColor.PrimaryColor = color;
                    ThemeColor.SecondaryColor = ThemeColor.ChangeColorBrightness(color, -0.3);
                }
            }
        }
  • 在子界面FormProduct.cs中,添加页面的颜色变换方法【以其为例子,代码如下】
    public partial class FormProduct : Form
    {
        public FormProduct()
        {
            InitializeComponent();
        }
        private void FormProduct_Load(object sender, EventArgs e)
        {
            LoadTheme();
        }
        private void LoadTheme()
        {
            foreach (Control btns in this.Controls) {
                if(btns.GetType() == typeof(Button))
                {
                    Button btn = (Button)btns;
                    btn.BackColor = ThemeColor.PrimaryColor;
                    btn.ForeColor = Color.White;
                    btn.FlatAppearance.BorderColor = ThemeColor.SecondaryColor;

                }
            }
            label4.ForeColor = ThemeColor.SecondaryColor;
            label5.ForeColor = ThemeColor.PrimaryColor;

        }
    }
  • 其余的子Form中也如上编写代码。

效果:

在这里插入图片描述


五、关闭按钮

一个关闭按钮,用于关闭子Form,并重置为默认值。

Step1. Button

  • Name:btnCloseChildForm
  • FlatStyle:Flat
  • FlatAppearance:
  • BorderSize:0
  • Image:自己添加图片
  • Dock:Left
    在这里插入图片描述

Step2. Button点击事件

  • 点击btnCloseChildForm后,关闭子Form。【Form1.cs代码如下:】
        public Form1()
        {
            InitializeComponent();
            random = new Random();
            btnCloseChildForm.Visible = false;
        }
                private void ActivateButton(object btnSender)
        {
            if (btnSender != null)
            {
                if (currentButton != (Button)btnSender)
                {
                    DisableButton();
                    Color color = SelectThemeColor();
                    currentButton = (Button)btnSender;
                    currentButton.BackColor = color;
                    currentButton.ForeColor = Color.White;
                    currentButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    // 上方栏的颜色变化
                    panelTitleBar.BackColor = color;
                    panelLogo.BackColor = ThemeColor.ChangeColorBrightness(color,-0.3);
                    //
                    ThemeColor.PrimaryColor = color;
                    ThemeColor.SecondaryColor = ThemeColor.ChangeColorBrightness(color, -0.3);
                    btnCloseChildForm.Visible = true;
                }
            }
        }
        
        private void btnCloseChildForm_Click(object sender, EventArgs e)
        {
            //activeForm不为null,说明已经有一个子窗体被打开。
            if (activeForm != null)
            {
                activeForm.Close();
                Reset();
            }
        }

        private void Reset()
        {
            DisableButton();
            lblTitle.Text = "HOME";
            panelTitleBar.BackColor = Color.FromArgb(0, 150, 136);
            panelLogo.BackColor = Color.FromArgb(39, 39, 58);
            currentButton = null;
            btnCloseChildForm.Visible = false;  
        }

效果:

在这里插入图片描述

六、在HOME添加LOGO【待补充,进阶】

更新时间

  • 2024.08.13:创建+第一章编写
  • 2024.08.14:第2,3,5章编写+代码上传

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

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

相关文章

十、Linux二进制安装ClickHouse集群(含rpm安装)

目录 十、Linux二进制安装ClickHouse集群(含rpm安装&#xff0c;单机版使用rpm&#xff0c;集群使用tar包安装方式)1 部署前服务器配置&#xff08;集群的话三台都要配置&#xff09;1.2 配置hosts文件1.3 打开文件数限制1.4 取消 SELINUX1.5 禁用透明大页 2 下载所需文件2.1 t…

24/8/14算法笔记 复习_支持向量机svc

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种强大的监督学习模型&#xff0c;用于分类、回归甚至异常检测。它基于统计学习理论&#xff0c;特别关注找到数据的最佳分隔超平面。 import numpy as np import matplotlib.pyplot as pltfrom sklearn.sv…

vue3 antdv a-datepicker 修改datepicker 的panel宽度,初始弹出一些正常,但再次弹出,宽度就再次变小的解决

1、展示页面的框架结构&#xff1a; 2、然后&#xff0c;我们上二张图对比一下&#xff1a; 图1-1 需要的效果图&#xff1a; 图1-2 对比一下图1-1与图1-2&#xff0c;我们就会发现图1-1中的农历&#xff0c;换行显示了&#xff0c;第二张是有效的。 3、我们修改样式&#x…

秋招突击——8/15——知识补充——垃圾回收机制

文章目录 引言正文指针引用可达性分析算法垃圾回收算法标记清除算法标记整理算法复制分代收集 垃圾收集器Serial收集器ParNew并行收集器Parallel Scavenge吞吐量优先收集器Serial Old老年代收集器Parallel old收集器CMS收集器G1收集器&#xff08;Garbage First垃圾优先&#x…

关于堆的介绍

1.堆的概念及结构 如果有一个关键码的集合&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足&#xff1a;且则称为小堆&#xff08;或大堆&#xff09;。将根节点最大的堆叫做最大堆或者大根堆&#xff0c;根节点最小的堆叫做最小…

【Linux】:进程控制(创建、终止、等待、替换)

目录 1.进程创建 2.进程终止&#xff08;退出&#xff09; 2.1 什么是进程终止 2.2 进程退出的场景&#xff08;原因&#xff09; 2.3 进程退出码 2.4 错误码errno 2.5 进程常见的退出方法 正常终止 从main函数返回 调用库函数exit 系统接口_exit 3.进程等待 3.1 …

【Linux】简易线程池项目

线程池是一个可以巩固一些线程相关接口 && 加强理解的一个小项目。 注意&#xff1a;这里的线程池使用的线程并不是Linux原生接口&#xff0c;而是经过封装的&#xff0c;具体请看线程封装&#xff0c;为什么不使用原生接口&#xff1f; 因为原生接口一旦进行pthread…

2024最新easyrecovery 14中文破解版图文教程

使用EasyRecovery易恢复进行数据恢复非常简单。首先&#xff0c;用户需要选择需要恢复的数据类型&#xff0c;如文档、图片、视频等。然后&#xff0c;软件会对选定的存储设备进行全面扫描&#xff0c;以寻找可恢复的数据。在扫描过程中&#xff0c;用户可以预览部分已找到的文…

成化瓷器“制字衣横少越刀”--还有例外

孙瀛洲先生关于成化款瓷器的名言非常经典&#xff0c;但是&#xff0c;凡事总有以外。 图1&#xff0c;本人收藏成化斗彩鸡缸杯底款&#xff0c;制字的衣横越过双勾刀。 下面是两件台北故宫成化瓷器底款&#xff0c;制字下面的衣横也是越过刀了。 所以&#xff0c;凡事总有例外…

mysql5.7安装

1.创建一个software文件 2.先下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 3安装源包 rpm -ivh mysql-community-release-el7-5.noarch.rpm 可能会报错 改成命令 rpm -ivh mysql-community-release-el7-5.noarch.rpm --nodeps…

优化图像处理:从旋转与缩放到水印添加

1. 旋转与缩放的仿射变换 在 OpenCV 中&#xff0c;cv2.getRotationMatrix2D() 函数可以生成旋转矩阵&#xff0c;该矩阵用于对图像进行旋转和缩放变换。旋转矩阵的主要参数是&#xff1a; Center&#xff1a;旋转中心点的坐标 (x, y)。 Angle&#xff1a;旋转角度&#xff0…

数据结构与算法--图的应用

文章目录 回顾提要连通图生成树最小生成树构造最小生成树的算法普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法 最短路径狄杰斯特拉 (Dijkstra) 算法当前最短路径的更新拓扑排序拓扑排序方法拓扑排序示例总结 回顾 图的遍历方法&#xff1a; 深度优先遍历 (DFS)&#xff1a;从任意…

在centos7安装mysql

1.卸载旧环境 ps axj | grep mysql ps axj | grep mariabd 如果是这样就什么都不需要做。 如果不是 2.检查并卸载系统安装包 //检查安装包 rpm -qa | grep mysql//卸载安装包 rpm -qa | grep mysql | xargs yum -y remove 3.安装官方yum源 先查看系统的版本 比如我是7.9版…

力扣高频SQL 50题(基础版)第四十题之1164. 指定日期的产品价格

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第四十题1164. 指定日期的产品价格题目说明实现过程准备数据实现方式结果截图总结FIRST_VALUE()函数LAST_VALUE()函数NTH_VALUE()函数 LAST_VALUE()函数NTH_VALUE()函数 力扣高频SQL 50题&#xff08;基础版&#xff0…

YJ0043定制版抖音电商卷抢购系统带回收商城抖音电商优惠卷投资理财系统

系统是基于逍遥商城二开的系统&#xff0c;pc手机端都新增了邀请码验证 手机端重新定制的UI&#xff0c;前端产品不至于抖音卷也可以自行更改其他产品 用户前端下单&#xff0c;后台订单可以直接回收&#xff0c;后台支持设置默认邀请码和抢卷时间限制

动手学深度学习(pytorch)学习记录10-从零开始实现softmax回归[学习记录]

注&#xff1a;本代码在jupyter notebook上运行 封面图片来源 导包 import torch from IPython import display import torchvision from torchvision import transforms from torch.utils import data设置加载数据的线程数 def get_dataloader_workers(): ""&qu…

《学会 SpringBoot 系列 · spring.factories 详解》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

机器人阻抗控制之设计方法

机器人阻抗控制的设计方法主要围绕调整机器人与环境之间的动态关系&#xff0c;使其等效为由弹簧-阻尼-质量组成的二阶系统。这一控制策略不是直接控制机器人的运动或其与外界的接触力&#xff0c;而是控制这二者之间的动态关系。以下是机器人阻抗控制设计方法的详细阐述&#…

Centos7系统上安装docker

centos7安装docker 安装之前&#xff0c;一定查看是否安装docker&#xff0c;如果有&#xff0c;卸载老版本 我是虚拟机装的Centos7&#xff0c;linux 3.10 内核&#xff0c;docker官方说至少3.8以上&#xff0c;建议3.10以上&#xff08;ubuntu下要linux内核3.8以上&#xff…

LVS详细配置

目录 LVS简介 LVS集群体系结构 LVS相关术语 lvs集群的类型 1、NAT模式 NAT简介 NAT模式数据逻辑 2、DR模式 DR模式简介 DR模式数据逻辑 DR模式的特点 3、TUN模式 TUN模式简介 TUN模式数据传输过程 TUN模式特点 4、fullnet模式 LVS模式总结 LVS调度算法 LVS静…