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控件,它是一个表格布局容器。

相关文章
Winform中Textbox、NumericUpDown等修改高度,禁止输入数字或内容的实现
Winform中的Textbox、NumericUpDown控件通常在单行的情况下,无法直接通过`Height`属性修改高度,但很多时候我们需要调整其高度,使其显示的更加合理,主要介绍三种方法...
3883 0
|
3月前
|
C# 数据库 Windows
C# WinForms数据绑定详解(手把手教你将数据源绑定到WinForms控件)
本教程带你快速掌握C# WinForms数据绑定,通过定义员工模型并绑定到ListBox和DataGridView,实现数据自动展示。介绍DataSource、DisplayMember及BindingSource的使用,帮助新手减少重复代码,提升开发效率,是WinForms入门必备技能。(238字)
|
C# 索引 Windows
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
8671 0
Winform控件优化之TabControl控件的使用和常用功能
|
C# 容器
Winform控件优化之TabControl控件的美化和功能扩展
在基本的TabControl控件使用和功能之上,可以尝试对其进行美化和功能扩展,比如动态删除或添加tab、绘制图标按钮及鼠标hover时的背景变化、Tab从右向左布局的优化处理等。最重要...
4050 0
Winform控件优化之TabControl控件的美化和功能扩展
|
C# Windows 容器
C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性
NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip方法用于显示气球状提示框(Win10只有为本地Toast通知),ToolTip\oolTipText可以...
3759 0
C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
1386 0
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
787 2
|
开发框架 前端开发 JavaScript
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
|
人工智能 API Apache
推荐3款开源、美观且免费的WinForm UI控件库
推荐3款开源、美观且免费的WinForm UI控件库
3289 6
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
1830 0