【问题标题】:Problem with usercontrol scaling when added at run-time in .Net, WinForms在.Net,WinForms中运行时添加用户控件缩放问题
【发布时间】:2010-04-02 14:40:25
【问题描述】:

这里是一个小型 VB.Net 2008 示例的链接:

http://www.4shared.com/file/255391716/26c45c1e/UserControlTest.html

还有一个 C# 示例:

http://www.4shared.com/file/255392906/27f4efbb/UserControlTestCHash.html

抱歉,但它是免费的主机,所以你必须等待 10 秒。

首先是复制的步骤,然后我将解释问题所在:

(1) 创建一个 System.Windows.Forms.UserControl 并在右下角添加一个按钮。将按钮锚保留为默认值(左上角)。添加更多点缀在周围的按钮,以便您可以看到它们正确缩放。

(2) 在构造函数中 InitializeComponent 调用之后将UserControl 添加到窗体中。

(3) 运行表单。

(4) 以某种方式增加表单字体大小(例如单击表单按钮)。

用户控件中的所有控件都可以完美缩放,但用户控件本身不能。它的宽度和高度增加了太多。现在看看右下角的按钮和用户控件之间的边距。

要解决此问题,必须在调用 InitializeComponent之前添加用户控件。

如果我无法在 InitializeComponent 之前添加用户控件,有什么方法可以纠正缩放比例吗?

【问题讨论】:

    标签: c# .net vb.net user-controls scaling


    【解决方案1】:

    编辑:我已经删除了我之前的答案(基本上说“在我的机器上可以正常工作”)并将其替换为以下内容。

    在您的自定义UserControl 上,设置AutoScaleMode = Inherit。这应该可以纠正用户控件的过度缩放。

    【讨论】:

    • 您好,它必须是 System.Windows.Forms.UserControl,而不仅仅是普通控件。
    • 我已经修改了我的问题以澄清
    • 该死的我没有看到你的编辑,它似乎工作!我最初将 AutoScaleMode = Font 硬编码到用户控件中,因为这是设计师所做的,而且我之前遇到过问题。我会做一些进一步的测试,希望我之前的问题不会发生。知道它为什么起作用吗?
    • 好吧,我知道我将其更改为显式 AutoScaleMode = Font 是有原因的。如果它设置为继承,它适用于我在 OP 中描述的情况,除非容器表单最初设置为非默认字体。我的解决方案是将AutoScaleMode设置为Font,然后在控件添加到表单后,将其设置为Inherit。如果在运行时更改字体,它将正确缩放。
    • 这真是一个很好的答案,
    【解决方案2】:

    没有复制,它可以完美缩放。如果您设置了 UserControl 的 Font 属性并且它与表单的字体大小不匹配,它将无法正确缩放。

    Font 属性是“环境”属性,如 ForeColor 和 BackColor。只要您将其保留为默认设置(在“属性”窗口中不是粗体),它将使用父级的字体。当每个控件使用相同的字体大小时,它们都会按比例缩放。

    要修复,请在“属性”窗口中选择“字体”属性的文本,按 Backspace 将其删除,然后按 Enter。它会重置为默认值。


    像这样修复你的代码:

            this.SuspendLayout();
            UserControl1 uc = new UserControl1();
            this.Controls.Add(uc);
            this.ResumeLayout(false);
    

    【讨论】:

    • @nobugz:澄清一下,如果我将表单上的字体设置为我想要的并将我的UserControls 上的字体设置保留为默认值,他们会“继承”我的父母字体设置吗?我不需要做或设置其他任何东西? AutoScale = Font 什么的?
    • 谢谢,不知何故,我以前从未听说过。
    • 不,不是那样。我还没有触及用户控件的属性。我所做的只是创建它,为背景着色,以便我可以看到它,然后添加一些按钮。缩放发生是因为用户控件中的控件正确缩放。增长过大的是用户控件本身。可能和VB有关?
    • 查看它的最佳方式是在用户控件的右下角放置一个按钮(将锚点保留为默认值)。增加字体大小后,to按钮和用户控件边缘之间的差距太大了。
    • @Jules,似乎没有人能够重现您的问题。通过在文件共享服务上发布一个重现项目来取得成功。
    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2015-09-23
    相关资源
    最近更新 更多