如何随后在WinForms应用程序中添加缩放行为



我正在使用Visual Studio 2008(C#)开发WinForms应用程序。相关表单的用户界面由几个SplitContainer组成。当我在将Windows字体大小设置为125%后测试该应用程序时,表单看起来并不像它应该的那样。缩放显然存在问题。因此,我搜索了一个解决方案,并在这里找到了一个。以下两行为我完成了任务:

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

正如在另一个问题中所解释的(分别在其中一个答案中),它们必须包含在设计器文件中的每个容器中。它可以正常工作,并且缩放操作正确。但另一方面,我必须手动编辑设计器文件,而这实际上是不应该做的。每次使用布局设计器时,添加的行都会丢失。编辑:只是澄清一下:这两个属性没有显示在设计器gui中。

现在,我的问题是:我能做什么?如何或在哪里添加正确缩放的代码,而不会对设计器文件进行肮脏的操作

我已经尝试过在InitializeComponent()方法调用之后,为构造函数中的每个容器简单地放置这两行,但在这个位置上,它们没有达到预期的效果。

所以,也许你已经知道该怎么做了。

提前感谢,
Alex

我终于找到了解决问题的方法。这并不是我最初想要的,但它也有同样的效果。

有关的两个属性没有显示在设计器gui中,为什么不让它们出现呢?因此,我创建了一个自定义控件,并为两个缩放属性添加了一些属性,以便它们出现在设计器中。

public class ScalableSplitContainer : SplitContainer
{
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Bindable(true)]
public new AutoScaleMode AutoScaleMode
{
get { return base.AutoScaleMode; }
set { base.AutoScaleMode = value; }
}
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Bindable(true)]
public new SizeF AutoScaleDimensions
{
get { return base.AutoScaleDimensions; }
set { base.AutoScaleDimensions = value; }
}
}

使用这个专门的SplitContainer,可以很容易地在gui中设置缩放行为,并且代码行包含在生成的设计器文件中。

最新更新