Visual Studio设计器总是试图更改我的控件。

18

我有一个相对复杂的UserControl,使用Visual Studio 2008时会给我带来一些麻烦。每次在设计器中打开该控件时,它都会立即更改设计器设置的一些无关紧要的值,即大小属性的初始化。如果我保存这些更改,关闭并重新打开,它几乎总是会决定另一个控件需要更改其初始大小,如此循环往复。幸运的是,由于我在所有地方都使用自动大小调整,所以这些更改是无害的,但是这样工作确实很麻烦。我不知道从哪里开始查明问题出在哪里,我现在唯一的想法是设计器每次打开控件时都会将自动调整大小的结果分配回初始大小字段。有关原因/解决方法有什么想法吗?

编辑:另外,我正在使用应用程序设置来保存特定可调整大小子组件的大小,跨应用程序运行,但我真的希望设计器足够智能,了解它只应该使用默认设置。


1
我完全理解这个问题,这真的很烦人,因为它每次都会提示我进行源代码控制,并且偶尔会导致破坏性更改! - GWLlosa
3
我在使用Visual Studio 2012时遇到了同样的问题,我的自定义控件中的子控件被调整大小。你有什么解决方案吗?请告诉我。 - almostProgramming
4个回答

10
或许可以帮到你:
我注意到,如果在FormDesigner中插入一个自定义的UserControl,它会出现奇怪的行为(不涉及WPF、Web等)。
其他控件(GroupBox、EditBox、ComboBox)大小会随机更改(对我来说发生在宽度上)。
被选择用于重新调整大小的控件似乎是随机的,但是在重启VS2010后,情况总是一样的。如果删除并重新插入,则设计器会选择另一个控件进行随机调整大小...

我将我的UserControl的属性AutoScaleMode从“Font”更改为“Inherit”,然后就没有再出现这种情况了。

是的,没错。也许我表述不够清楚。 我没有使用WPF或WebDesigner。 - Matteo TeoMan Mangano
抱歉,不知道为什么我以为你回答了关于 WPF 的问题。 - John Saunders
1
AutoScaleMode很有帮助。在我的情况下将其设置为None。 - transistor1
这个救了我的一天。为什么UserControl的“AutoScaleMode”属性的默认值设置为字体呢?它不应该遵循父模式吗? - Firanto

5

你说得对,设计师常常会尝试为属性添加默认值。

在属性声明的顶部添加以下内容:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

这将告诉设计师忽略此属性。


我无法使用Size属性完成此操作,因为它是从Control继承而来的,并且不是虚拟的(除非重新声明并将其导向基类,但这很愚蠢)。另外,我主要使用现成的组件,所以我必须将所有这些更改为我的自定义派生类,这也不是一个好选择。 - Not Sure
我不明白如何在不使用 "new" 的情况下控制 Size 属性。 - Benjol

1

我有一个类似的问题。我在一个用户控件上使用了Infragistics GroupBox,并且现在想要在派生类中更改其外观和感觉。我已经在基类中将其设置为protected,因此它允许我在派生类中更改属性。但是它不会保存更改。每次打开时,我都会得到基类的旧值。

有什么想法吗?

编辑:我解决了这个问题。

尝试对上面给出的答案进行各种值的设置。 使用[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]而不是[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]会生成更改属性的代码-并且事情按预期工作。


0
尝试覆盖控件的DefaultSize属性。
来自MSDN: DefaultSize属性表示控件在初始创建时的大小。

不是我控制大小在变化,而是所有子控件的大小在改变。 - Not Sure

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