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

相关文章
|
API C# Windows
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
3642 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)
Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)
Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)
|
7月前
|
定位技术 iOS开发
在地图页面,自动布局控件开始是隐藏或在屏幕外需要正常显示时再为正常的显示状态的,需要在显示之前加入
在地图页面,自动布局控件开始是隐藏或在屏幕外需要正常显示时再为正常的显示状态的,需要在显示之前加入
53 0
|
7月前
Qt 控件大小随着窗口的大小而变化设置
Qt 控件大小随着窗口的大小而变化设置
182 0
|
算法 API C#
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
最终优化实现ButtonPro按钮(继承自Button),既提供Button原生功能,又提供扩展功能,除了圆角以外,还实现了圆形、圆角矩形的脚尖效果、边框大小和颜色、背景渐变颜色...
2115 0
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
|
C# 图形学 Windows
Winform控件优化之圆角按钮【各种实现中的推荐做法】(上)
Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化...尝试介绍很常见的圆角效果,通过重写控件的OnPaint方法实现绘制,并在后面进一步探索对应的优化和可能的问题
1487 0
Winform控件优化之圆角按钮【各种实现中的推荐做法】(上)
|
C# 前端开发
WPF如何得到一个在用户控件内部的元素的坐标位置
原文:WPF如何得到一个在用户控件内部的元素的坐标位置 例如有这样一个用户控件: 这是主窗口: ...
1438 0
|
SQL
【实现】表单控件里的子控件的变化。
     前情回顾: 【实现】表单控件的UI布局,实现方式         上一篇说的是表单布局上的变化,也就是通过TR、TD的设置,实现了多行多列的效果。那么格子画好了,我们 可以往里面放控件了。
887 0
|
前端开发 C#
使用MVVM DataTriggers在WPF XAML视图之间切换/Window窗口自适应内容大小并居中
原文 使用MVVM DataTriggers在WPF XAML视图之间切换 相关文章: http://www.technical-recipes.com/2016/switching-between-wpf-xaml-views-using-mvvm-datatemplate/ 这篇文章解决了能够根据ViewModel类的属性在不同视图之间切换的问题。
1879 0
|
C#
WPF 获取鼠标屏幕位置、窗口位置、控件位置
原文:WPF 获取鼠标屏幕位置、窗口位置、控件位置 public struct POINT { public int X; public int Y; ...
1893 0