同步操作将从 hlz2516/Winform.AutoSizeHelper 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
一个适用于Winform的控制布局自适应分辨率辅助类。
在界面设计器中设计窗体界面,比如:
关闭Form1的AutoScaleMode属性。找到Form1.Designer.cs双击打开,按下ctrl+F查找字符串:“AutoScaleMode”,之后你会看到这行:
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
将System.Windows.Forms.AutoScaleMode.Font改为System.Windows.Forms.AutoScaleMode.None。
当然,在Form1的设计器界面的属性面板中找到AutoScaleMode属性并设置为None也是可以的。
using AutoSizeTools;
namespace XXX{
public partial class Form1 : Form{
AutoSizeHelper helper;
public Form1()
{
InitializeComponent();
helper = new AutoSizeHelper();
helper.SetContainer(this);
}
}
}
AutoSizeHelper类只能处理一些简单的情况,对于稍微复杂一点的需求,就轮到更加完善的AutoSizeHelperEx类出场解决了。在演示之前,需要了解一下AutoSizeHelperEx与AutoSizeHelper的不同的一些地方:
如何使用AutoSizeHelperEx
在简单使用
小节中,我们将第三步的代码改为:
using AutoSizeTools;
namespace XXX{
public partial class Form1 : Form{
AutoSizeHelperEx helper;
public Form1()
{
InitializeComponent();
helper = new AutoSizeHelperEx(this);
}
}
}
接着,我们给Form1添加SizeChanged事件的处理程序。打开Form1的设计器,在属性管理器中,点击事件(闪电logo),找到Sizechanged项,双击它。
转到后台代码,在该事件处理程序中调用更新控件方法,使每次窗体/控件大小发生变化时更新容器内所有子控件。
private void Form1_SizeChanged(object sender, EventArgs e)
{
helper.UpdateControls();
}
如果我们想通过点击按钮6在按钮2和按钮3之间动态添加一个新按钮,我们可以通过以下方式实现:
private void button6_Click(object sender, EventArgs e)
{
Button newBtn = new Button();
newBtn.Name = "button7";
newBtn.Location = new Point(568, 12);//这个位置是如何确定的?
newBtn.Size = new System.Drawing.Size(75, 23);
newBtn.Text = "button7";
//apply button6's font to newBtn font
newBtn.Font = new Font(button6.Font.FontFamily, button6.Font.Size);
newBtn.UseVisualStyleBackColor = true;
this.Controls.Add(newBtn);
helper.AddNewControl(newBtn);
helper.UpdateControls();
}
说明一下,新生成的按钮位置是如何确定的,这个按钮位置是在原设计器中的位置。有个小技巧是,你可以先在设计器界面中拖入一个button,放到你待会儿想要新生成的按钮的位置上,然后把design.cs中生成的对应代码copy到这里来
更多例子请参考仓库demo,每个例子都是针对特定问题的:
在发布该类库一段时间后,我发现一些开发者滥用AutoSizeHelper/AutoSizeHelperEx的情况,从而导致一些意外错误反馈到我这里,因此,我特意加了这一小节,希望各位开发者分析清楚自己的界面情况后再决定哪些类该用自适应辅助功能,哪些类不该用,不要觉得我给每个窗体/控件类应用自适应辅助功能就OK了,事情没有你想的这么简单!
分辨的原则:哪些窗体/控件在它自身大小改变后,它内部的直接子控件(我的意思是不用关心子控件的子控件)还是保持在它原来的相对位置上(直观表现就是每个直接子控件的location属性不变),这些窗体/控件类就需要应用自适应辅助功能,这种情况下你才需要用到自适应辅助类,并调用SetContainer方法来设置这些窗体/控件作为容器。
再次强调:不要滥用AutoSizeHelper/AutoSizeHelperEx!!!
tips:当前中文版为最新版本,如果您觉得这个类对您有帮助,帮忙点个star让更多人看到,谢谢!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。