当前位置: 首页 > article >正文

一种C# Winform的UI处理

效果

·圆角 + 阴影 +突出按钮

说明

这是一种另类的处理,不是多层窗口 也不是WPF 。这种方式的特点是比较简单,例如圆角、阴影、按钮等特别容易修改过。其实就是html + css + DirectXForm。

在VS中如下

圆角和阴影

然后编辑这个窗体的Html模板,例如圆角和阴影的调整可以修改CSS中的

    border-radius: 14px;
    box-shadow: 0px 8px 24px 0px rgba(0, 0, 0, 0.2);

我要想一个小圆角可以改成 border-radius: 6px;

中间的按钮

中间的按钮的CSS

.play_btn
{
    position: fixed;
    left: 50%;
    margin-left: -39px;
    cursor: pointer;
    bottom: 22px;    
    display: inline-block;
    width: 78px;
    height: 78px;
    background-color: rgb(255, 255, 255);     
    border-radius: 39px;
    box-shadow: 4px 8px 8px 0px rgba(80, 80, 80, 0.55); 
}
如果你想要个丑点的阴影 ,可以改成

box-shadow: 4px 8px 8px 0px rgba(255, 0, 0, 0.75);

反正就是CSS

窗体可以随便放控件 

全部代码

using DevExpress.Utils;
using DevExpress.Utils.Html;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace MP3Cut
{public partial class Form1 : DevExpress.XtraEditors.DirectXForm{public Form1(){InitializeComponent();HtmlElementMouseDown += DemoDirectXForm_HtmlElementDown;}public DxHtmlElement element_mouse = null;void DemoDirectXForm_HtmlElementDown(object sender, DxHtmlElementMouseEventArgs e){var args = e.MouseArgs as DXMouseEventArgs;if (e.Element == null || args == null)return;element_mouse = e.Element;args.Handled= click_proc(element_mouse);}bool click_proc(DxHtmlElement element){if (element == null)return false;string id = element.Id;if ((string.Compare(id, "playbutton", true) == 0)|| (string.Compare(id, "playbutton_img", true) == 0)){DxHtmlImageElement el = (DxHtmlImageElement)(this.FindElementById("playbutton_img"));string src = el.Src;if (string.Compare(src, "play", true) == 0){el.ClassName = "img_pause";el.Src = "pause";                    }else{el.ClassName = "img_play";el.Src = "play";} //directXFormContainerControl1.Refresh();  return true;}return false;}private void Form1_MouseClick(object sender, MouseEventArgs e){}private void directXFormContainerControl1_DoubleClick(object sender, EventArgs e){}private void Form1_MouseDoubleClick(object sender, MouseEventArgs e){if (element_mouse != null){                click_proc(element_mouse);this.Invalidate(true);this.Scale(1.000f);}}private void simpleButton1_Click(object sender, EventArgs e){if (element_mouse != null){click_proc(element_mouse);this.Invalidate(true);this.Scale(1.000f);}}}
}

HTML

<div class="shadowframe"><div class="frame" id="frame"><div class="titlebar"><img class="logo" src="logo" /><div class="title">一个例子</div><div class="searchbox"></div> <img class="button" src="Close" id="closebutton"/></div><div class="content" id="content"></div><div class="footerbar"> <img class="button" src="begin" id="beginbutton"/><div  style="width:200px;display: inline-block;"></div>				<img class="button" src="end" id="enbbutton"/>	</div></div><div class="play_btn" id="playbutton"><img class="img_play" id="playbutton_img" src="play" /></div>	
</div>

CSS

body{
    padding: 30px;
}
.titlebar{
    padding: 11px 12px 11px 11px;
    display: flex;
    flex-direction: row;
    height: 40px;
}
.shadowframe{
    height: 100%;
    border-radius: 6px;
    box-shadow: 0px 8px 24px 0px rgba(0, 0, 0, 0.2);
}
.frame{
    height: 100%;
    display: flex;
    flex-direction: column;
    border-radius: 6px;
    border: 1px solid rgba(0, 0, 0, 0.2);
    background-color: rgb(252, 252, 253);
    box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.15);
}
.footerbar{
    padding: 11px 11px 11px 10px;
    align-items: center;  
    height: 42px;
    background-color:rgb(249,250,251);
    border-radius: 0px 0px 13px 13px;
    text-align: center;
    border-top: 1px solid rgb(229, 231, 235);
}
.contenttext{
    display: flex;
    justify-content: center;
    align-items:center;
    flex-direction: column;
    align-self: center;
    font: 14px 'Segoe UI';
    color: @DisabledText/0.5;
}
.content{
    flex-grow: 1;
}   
.panelspace{
    flex-grow:1;
}
.button {
    margin: 0px 4px 0px 4px;
    padding: 8px;
    opacity: 1;
    object-fit: none;
}
.button:hover{
    border-radius: 8px;
    background-color: @ControlText/0.2;
}
.button:active{
    opacity: 0.25;
    border-radius: 8px;
    background-color: @ControlText/0.2;
}
.logo{
    margin:-5px 15px 0px 0px;
    object-fit: none;
}
.searchbox{
    display: flex;
    flex-direction: row;    
    height: 40px;
    flex-grow: 1;
}
.play_btn
{
    position: fixed;
    left: 50%;
    margin-left: -39px;
    cursor: pointer;
    bottom: 22px;    
    display: inline-block;
    width: 78px;
    height: 78px;
    background-color: rgb(255, 255, 255);     
    border-radius: 39px;
    box-shadow: 4px 8px 8px 0px rgba(80, 80,80, 0.55);
   
}

.play_btn:hover{ 
    background-color: rgb(237,238,239);
}
.play_btn:active{ 
    background-color:  rgb(244,248,249);
}
.img_play {
    width: 42px;
    height: 42px;
    margin-top: 19px;
    margin-left: 24px;
    pointer-events: none;
}  
.img_pause {
    width: 24px;
    margin-top: 22px;
    margin-left: 27px;
    pointer-events: none;
}  
.title {
    padding: 5px;
    display: inline-block;
    font: 19px 'Segoe UI';
    font-weight: bold;
    color: rgb(100, 116, 139);
}

相关文章:

一种C# Winform的UI处理

效果 圆角 阴影 突出按钮 说明 这是一种另类的处理&#xff0c;不是多层窗口 也不是WPF 。这种方式的特点是比较简单&#xff0c;例如圆角、阴影、按钮等特别容易修改过。其实就是html css DirectXForm。 在VS中如下 圆角和阴影 然后编辑这个窗体的Html模板&#xff0c…...

java笔记02

运算符 1.隐式转换和强制转换 类型转换的分类 1.隐式转换&#xff1a; 取值范围小的数值 转换为 取值范围大的数值 2.强制转换&#xff1a; 取值范围大的数值 转换为 取值范围小的数值隐式转换的两种提升规则 取值范围小的&#xff0c;和取值范围大的进行运算&#xff0c;小的…...

为什么视频文件需要压缩?怎样压缩视频体积即小又清晰?

在日常生活中&#xff0c;无论是为了节省存储空间、便于分享还是提升上传速度&#xff0c;我们常常会遇到需要压缩视频的情况。本文将介绍为什么视频需要压缩&#xff0c;压缩视频的好处与坏处&#xff0c;并教你如何使用简鹿视频格式转换器轻松完成MP4视频文件的压缩。 为什么…...

Nginx — Nginx处理Web请求机制解析

一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务&#xff1a; 二、Nginx进程模型 1、nginx常用命令解析 master进程&#xff1a;主进程&#xff08;只有一个&#xff09; worker进程&#xff1a;工作进程&#xff08;可以有多个&#xff0c;默认只有一…...

GPT Workspace体验

GPT Workspace是一款将强大的自然语言处理模型&#xff08;如 ChatGPT 和 Gemini&#xff09;集成到 Google Workspace 应用&#xff08;如 Google Docs, Sheets, Slides, Gmail 和 Drive&#xff09;中的工具或插件。它的目标是提升用户在日常办公中的效率和创造力。 以下是对…...

1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯

动态规划解最小花费爬楼梯问题&#xff1a;LeetCode 746. 使用最小花费爬楼梯 1. 题目链接 LeetCode 746. 使用最小花费爬楼梯 题目要求&#xff1a;给定一个整数数组 cost&#xff0c;其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 0 或 1 的台阶开始爬&a…...

5.0 WPF的基础介绍1-Grid,Stack,button

WPF: Window Presentation Foundation. WPF与WinForms的对比如下&#xff1a; 特性WinFormsWPF技术基础基于传统的GDI&#xff08;图形设备接口&#xff09;基于DirectX&#xff0c;支持硬件加速的矢量渲染UI设计方式拖拽控件事件驱动代码&#xff08;简单但局限&#xff09;…...

Docker 端口映射原理

在 Docker 中&#xff0c;默认情况下容器无法直接与外部网络通信。 为了使外部网络能够访问容器内的服务&#xff0c;Docker 提供了端口映射功能&#xff0c;通过将宿主机的端口映射到容器内的端口&#xff0c;外部可以通过宿主机的IP和端口访问容器内的服务 以下通过动手演示…...

SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)

🔔 SDL/SDL2 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 效果 使用QWidget加载了SDL的窗口,渲染器使用硬件加速跑GPU的。支持Qt窗口缩放或显示隐藏均不影响SDL的图像刷新。   操作步骤 1、在创建C++空工程时加入SDL,引入头文件时需…...

算法每日一练 (23)

&#x1f4a2;欢迎来到张翊尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (23)最大正方形题目描述解题思路解题代码…...

UE5学习笔记 FPS游戏制作28 显式玩家子弹数

文章目录 添加变量修改ShootOnce方法&#xff0c;设计时减少子弹&#xff0c;没有子弹不能开枪在UI上显示 添加变量 在Gun类中添加BulletNum和ClipSize两个参数 BulletNum是当前还有多少子弹&#xff0c;ClipSize是一个弹匣多少子弹 Rifle的ClipSzie设置为30&#xff0c;Laun…...

2025前端八股文终极指南:从高频考点到降维打击的面试突围战

2025前端八股文终极指南&#xff1a;从高频考点到降维打击的面试突围战 一、2025前端八股文核心考点重构 1.1 新型响应式系统三连问 Vue3信号式响应性&#xff1a; // 信号式响应性底层实现 const [count, setCount] createSignal(0) effect(() > {console.log("当…...

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…...

【实战】渗透测试下的文件操作

目录 Linux查找文件 Windows查找文件 查找可写目录 windows Linux 创建 Windows Linux 压缩 解压 远程解压文件 Linux查找文件 >find / -name index.php 查找木马文件 >find . -name *.php | xargs grep -n eval( >find . -name *.php | xargs grep -n ass…...

基于深度神经网络的图像防篡改检测方法研究

标题:基于深度神经网络的图像防篡改检测方法研究 内容:1.摘要 随着数字化时代的发展&#xff0c;图像篡改现象日益普遍&#xff0c;严重影响了图像信息的真实性和可靠性。本文旨在研究基于深度神经网络的图像防篡改检测方法&#xff0c;以有效识别被篡改的图像。通过收集大量真…...

vue如何实现前端控制动态路由

在 Vue.js 中&#xff0c;动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由&#xff0c;实现多用户权限系统&#xff0c;不同用户展示不同的导航菜单。 动态路由的配置 动态路由的配置涉及到前端…...

学成在线--day02

复习知识点 classPath&#xff1a; 类加载路径,也就是jvm找字节码文件的路径&#xff0c;我们自己写的类&#xff0c;以及依赖的包&#xff0c;都会放到这个路径下面用于加载。 跨域问题&#xff1a; 是由于浏览器的同源策略&#xff08;协议&#xff0c;端口&#xff0c;ip…...

《构建有效的AI代理》学习笔记

原文链接:https://www.anthropic.com/engineering/building-effective-agents 《构建有效的AI代理》学习笔记 一、概述 核心结论 • 成功的AI代理系统往往基于简单、可组合的模式&#xff0c;而非复杂框架。 • 需在性能、成本与延迟之间权衡&#xff0c;仅在必要时增加复杂度…...

Go语言基础:数据类型

一、基础数据类型&#xff1a;Go语言的积木块 1.1 数字类型全家福 package mainimport ("fmt" )func main() {// 有符号整数类型var a int 42 // int 类型&#xff0c;自动选择32或64位var b int8 127 // int…...

数据处理专题(四)

目标 使用 Matplotlib 进行基本的数据可视化。‍ 学习内容 绘制折线图 绘制散点图 绘制柱状图‍ 代码示例 1. 导入必要的库 import matplotlib.pyplot as pltimport numpy as npimport pandas as pd 2. 创建示例数据集 # 创建示例数据集data { 月份: [1月, 2月, 3…...

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…...

云钥科技多通道工业相机解决方案设计

项目应用场景分析与需求挑战 1. 应用场景 ‌目标领域‌&#xff1a;工业自动化检测&#xff08;如精密零件尺寸测量、表面缺陷检测&#xff09;、3D立体视觉&#xff08;如物体建模、位姿识别&#xff09;、动态运动追踪&#xff08;如高速生产线监控&#xff09;等。 ‌核心…...

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

一、对话效果演示 ESP32与豆包大模型的RTC连续对话 二、ESP-ADF 介绍 乐鑫 ESP-ADF&#xff08;Espressif Audio Development Framework&#xff09;是乐鑫科技&#xff08;Espressif Systems&#xff09;专为 ESP32 系列芯片开发的一款音频开发框架。它旨在简化基于 ESP32 芯…...

【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)

为了求解损失函数 对 的导数&#xff0c;并利用最小二乘法向量形式求解 的值‌ 这是‌线性回归‌的平方误差损失函数&#xff0c;目标是最小化预测值 与真实值 之间的差距。 ‌损失函数‌&#xff1a; 考虑多个样本的情况&#xff0c;损失函数为所有样本的平方误差之和&a…...

【Django】教程-2-前端-目录结构介绍

【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录&#xff0c;编写HTML模板&#xff08;含有模板语法&#xff0c;继承&#xff0c;{% static ‘xx’ …...

JS判断对象是否为空的方法

在 JavaScript 中&#xff0c;判断一个对象是否为空对象&#xff08;即没有自身可枚举属性&#xff09;&#xff0c;可以通过以下方法实现&#xff1a; 方法 1&#xff1a;使用 Object.keys() javascript function isEmptyObject(obj) {// 确保是普通对象&#xff08;排除 n…...

详解list容器

1.list的介绍 list的底层结构是双向带头循环链表&#xff0c;允许随机的插入和删除&#xff0c;但其内存空间不是连续的。随机访问空间能力差&#xff0c;需要从头到尾遍历节点&#xff0c;不像vector一样高效支持 2.list的使用 构造函数 1.默认构造函数&#xff1a;创建一个…...

leetcode_977. 有序数组的平方_java

977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/ 1.题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1…...

Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理

在现代企业级应用开发中&#xff0c;前后端分离已成为主流模式&#xff0c;前端负责界面呈现&#xff0c;后端专注提供 RESTful API 接口。然而&#xff0c;接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3&#xff0c;为开发者…...

前端面经分享(25/03/26)

北京一家做AI解决方案的公司&#xff0c;技术一面&#xff0c;15k-20k&#xff0c;要求3-5年 你们React项目里路由模式用的什么React里class组件和function组件都用过吗常用Hook&#xff0c;解释一下他们的作用useEffect第二个参数填空数组和不填有什么区别React组件通信的常用…...