winform-SunnyUI控件解决大小位置变化

简介: winform-SunnyUI控件解决大小位置变化

前言

最近在做.net的项目,而个人对于.net仅限于能写点代码,样式相关的内容是一概不同,不得已最近边学边干,期间碰到了多种多样的问题故此对这些内容进行整理。


问题种类


使用SunnyUI解决控件DPI问题(分辨率问题)


项目在做技术选型的时候没有考虑好会有分辨率的问题导致直接选用了winform,之前一直做B/S开发,现在到C/S开发这点没有考虑好,首先这里避坑的话可以用WPF这个框架,它这个会自适应分辨率的问题,好了现在说一下解决的方案。


1.添加配置文件app.manifest



2.将配置文件中dpiAware打开



3.添加uiStyleManager1控件并将控件中DPIScale设置为true



4.效果图



使用FlowLayOutPanel解决控件边距问题


1.问题样式


可以看到这里切换了语言后新增这个按钮将旁边的按钮遮盖了。


2.使用FlowLayOutPanel搭配控件自带的Margin属性


首先窗体添加FlowLayOutPanel控件


添加控件后将我们需要进行设置固定边距的控件放入,然后设置按钮控件的Margin属性



3.效果图



使用SunnyUIUIButton控件以及UISymbolButton自适应大小


1.UIButton控件AutoSize属性设置后不触发问题


因为项目中需要切换语言,就导致切换语言后文本长度发生变化,对应的控件也要自动去匹配文本长度,但是UIButton在属性界面设置了以后程序运行期间并没有生效,所以这里排查是因为UIButton的AutoSize属性默认是false,需要在程序运行的时候修改为true,也就是在窗体加载事件中,或者窗体构造函数中将UIButton的AutoSize设置为true。

UIButton的AutoSize属性初始化配置。

2.解决UISymbolButton控件没有AutoSize属性,并且设置后无效问题


UISymbolButton的AutoSize可以看到它是直接给设定了只能为false,也就是说就算调用set给AutoSize属性赋值也是false。



解决方式就是检测UISymbolButton控件的TextChanged事件,当控件的文本发生变化时会触发这个事件,那么就可以在这个事件中控件的大小进行修改,以符合文本长度。

· 添加事件


· 自定义刷新控件大小

 

/// <summary>
        /// 刷新控件大小,在文本内容发生变化时
        /// </summary>
        /// <param name="button"></param>
        private void AdjustButtonSize(UISymbolButton button)
        {
            // 使用 MeasureString 方法计算文本的大小
            using (var g = button.CreateGraphics())
            {
                var textSize = g.MeasureString(button.Text, button.Font);
                // 中文 调整按钮的大小
                button.Width = (int)textSize.Width + 60; // 可根据需要添加一些额外的空白区域
                button.Height = (int)textSize.Height + 14;
                //英文
                button.Width = (int)textSize.Width + 60; // 可根据需要添加一些额外的空白区域
                button.Height = (int)textSize.Height + 14;
            }
        }


· 在TextChanged中调用该方法

private void btnAdd_TextChanged(object sender, EventArgs e)
        {
            AdjustButtonSize((sender as UISymbolButton));
        }


总结


winform中Margin属性


使用Margin属性可以在控件之间或控件与容器之间创建空白区域,以实现更灵活的布局。通过调整Margin属性的值,可以控制控件的间距和外观,从而满足特定的界面需求。


Margin属性是一个Padding结构类型,用于指定控件的上、下、左、右四个方向的间距。

Padding结构有四个属性:Top、Bottom、Left、Right,分别表示上、下、左、右方向的间距。


winform中MeasureString方法


MeasureString方法是Graphics类中的一个方法,用于测量给定字符串在指定字体和大小下的宽度和高度。该方法返回一个SizeF对象,其中包含测量结果的宽度和高度。

public SizeF MeasureString(string text, Font font);

参数说明:


text:要测量的字符串。

font:要应用于字符串的字体。

UISymbolButton自适应大小的问题就是通过这个方法解决的。


winform中FlowLayOutPanel控件


FlowLayoutPanel控件是一个面板容器,它按照水平或垂直方向流动排列其子控件。

FlowLayoutPanel控件适用于动态调整大小和位置的控件集合,可以根据容器的大小自动重新布局子控件。

FlowLayoutPanel控件提供了一种自动流动布局的方式,使子控件可以根据空间的可用性自动调整位置。

子控件可以按照添加的顺序依次排列,或者可以根据特定的布局样式进行排序。

FlowLayoutPanel控件提供了一些属性和方法,用于控制子控件的间距、对齐方式、换行行为等。

通过设置FlowLayoutPanel控件的Dock属性或将其放置在其他容器控件中,可以实现更复杂的布局。

它解决了上面控件布局问题,也就是控件发生大小变化后与之相邻的控件边距不会发生变化,这样项目的样式整体看着就协调了。

还要一个与FlowLayOutPanel控件功能类似的控件是TableLayoutPanel控件,它是一个表格布局容器。

相关文章
|
C# 索引 Windows
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
7022 0
Winform控件优化之TabControl控件的使用和常用功能
Winform中Textbox、NumericUpDown等修改高度,禁止输入数字或内容的实现
Winform中的Textbox、NumericUpDown控件通常在单行的情况下,无法直接通过`Height`属性修改高度,但很多时候我们需要调整其高度,使其显示的更加合理,主要介绍三种方法...
3296 0
|
C# 容器
Winform控件优化之TabControl控件的美化和功能扩展
在基本的TabControl控件使用和功能之上,可以尝试对其进行美化和功能扩展,比如动态删除或添加tab、绘制图标按钮及鼠标hover时的背景变化、Tab从右向左布局的优化处理等。最重要...
3569 0
Winform控件优化之TabControl控件的美化和功能扩展
|
开发框架 前端开发 JavaScript
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
|
11月前
|
人工智能 API Apache
推荐3款开源、美观且免费的WinForm UI控件库
推荐3款开源、美观且免费的WinForm UI控件库
1887 6
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
464 3
C#winform中使用SQLite数据库
|
12月前
|
开发者 Windows
.NET 开源扁平化、美观的 C/S 控件库
【10月更文挑战第23天】介绍了三款适用于 .NET 平台的开源扁平化、美观的 C/S 控件库:MaterialSkin 采用 Google Material Design 风格,适合现代感界面;Krypton Toolkit 提供丰富控件,界面易于定制;Fluent Ribbon Control Suite 模仿 Office 界面,适合复杂功能应用。每款控件库均附有示例代码及 GitHub 链接。
464 0
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
|
12月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
841 0