在.Net WinForms中运行时添加用户控件时,用户控件缩放存在问题

3
以下是一个微小的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)将UserControl添加到构造函数中的一个表单中,在InitializeComponent调用之后。(3)运行表单。(4)增加表单字体大小的一些方法(例如,点击表单按钮)。所有用户控件都能完美缩放,但用户控件本身不行。它的宽度和高度增加了太多。现在看看右下角按钮和用户控件之间的边距。要纠正问题,必须在InitializeComponent调用之前添加用户控件。如果在InitializeComponent之前无法添加用户控件,是否有任何方法可以纠正缩放?
2个回答

13

编辑:我已删除之前的回答(基本上是“在我的机器上运行良好”),并用以下内容替换。

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

在您的定制UserControl上,设置AutoScaleMode = Inherit。这样就可以解决用户控件过度缩放的问题。

嗨,它必须是System.Windows.Forms.UserControl,而不仅仅是普通控件。 - Jules
我已经修改了我的问题以澄清。 - Jules
该死,我没有看到你的编辑,它似乎有效!我最初在用户控件中硬编码了AutoScaleMode = Font ,因为设计师也是这样做的,并且之前我有一些问题。我将进行进一步的测试,并希望我的之前的问题不会再次出现。你有任何想法为什么它有效吗? - Jules
嗯,我知道我将它更改为显式的AutoScaleMode = Font有原因。如果设置为继承,则在我的帖子中描述的情况下可以正常工作,但是当容器表单最初设置为非默认字体时除外。我的解决方案是将AutoScaleMode设置为Font,然后在将控件添加到窗体后,将其设置为Inherit。如果在运行时更改了字体,则它将正确缩放。 - Jules
1
这确实是一个很棒的答案。 - Kas

2
没有重现问题,它可以完美缩放。如果您已经设置了UserControl的Font属性并且它与窗体的字体大小不匹配,则它将无法正确缩放。
Font属性是一种“环境”属性,就像ForeColor和BackColor一样。只要将其保留为默认设置(在属性窗口中不加粗),它就会使用父控件的字体。当每个控件使用相同的字体大小时,它们都将按比例缩放。
要进行修复,请在属性窗口中选择Font属性的文本,按Backspace键将其删除,然后按Enter键。它将重置回默认值。
将您的代码修复如下:
        this.SuspendLayout();
        UserControl1 uc = new UserControl1();
        this.Controls.Add(uc);
        this.ResumeLayout(false);

谢谢,不知怎么的,我以前从未听说过这个。 - Refracted Paladin
不是这个问题。我没有触碰用户控件的属性。我所做的只是创建它,给背景着色以便我能看到它,并添加一些按钮。缩放发生是因为用户控件中的控件正确地进行了缩放。问题在于用户控件本身变得太大了。也许这与VB有关? - Jules
我已经添加了VB.NET和C#示例的链接。感谢您的时间。 - Jules
不,那也不行。我曾经碰巧尝试过那个方法。你确定在调用InitializeComponent之前没有尝试过那个代码吗? - Jules
谢谢!你救了我的一天。在我为UserControl和Parent PageView Control设置相同的字体后,它终于起作用了 :) - Palanikumar
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接