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

时间:2015-04-28 22:20:46

标签: c# winforms visual-studio windows-forms-designer

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

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

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

现在终于,我的问题是:我该怎么办?如何或在何处可以添加代码以进行正确的缩放而不会对设计器文件进行脏处理?

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

所以,也许你知道如何完成它。

提前致谢,
亚历

1 个答案:

答案 0 :(得分:1)

我终于找到了解决问题的方法。它不是我原本想要的,但它具有相同的效果。

有关两个属性不会在设计师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中轻松设置缩放行为,代码行包含在生成的设计器文件中。