2009-08-31 66 views
5

我被Visual Studio窗体编辑器中的一些奇怪行为所折服。我在我的应用程序中看到过几种不同的表单。每次我在Visual Studio的布局编辑器中打开表单时,某些控件将位于与离开时不同的位置。通常,一些按钮从右下角向上移动一点点。但它不只是按钮,在一个案例中它是一个可移动的容器面板。我必须重新定位它们然后保存并关闭表单。我已经确认,当窗体被打开时,它实际上是改变Location属性的布局编辑器,因为如果我保存并关闭具有正确位置按钮的窗体,它们在运行时将是正确的。每次查看窗体时,WinForms控件都会出现错位

这不是AnchorDock属性设置不正确的问题。编辑器实际上正在改变我的控件的Location属性。我看过.designer.cs文件,但没有看到任何异常。我试过删除并重新创建这些控件,但问题仍然存在。

任何想法我可以做什么?

它不是一个展示塞我只需要非常小心地手动修复控件,每次我打开它在winforms布局编辑器。

编辑:Visual Studio会自动检出文件以将Location设置为它固执的认为它应该是什么。

+1

这是一个股票VS2008或应用SP1? – Powerlord 2009-08-31 15:46:41

+0

是安装了SP1。其VS2008团队版+ SP1。 – 2009-08-31 16:02:16

+0

嗨。你找到了解决这个问题的方法吗?我突然感受到完全相同的行为! – Jalil 2012-05-28 18:28:47

回答

2

我找到了这个问题的答案,但它只是看起来像一个bug。自2003年以来从未解决!

简而言之:Visual Inheritance与Anchoring不兼容。

完整的答案在这里:http://weblogs.asp.net/rweigelt/archive/2003/09/24/28984.aspx

+0

这解决了你的问题?我无法再访问代码,所以我无法测试它。 – 2012-06-04 14:16:20

+0

也许你可以尝试在arch arch等偶数;-) – Andrew 2012-06-04 18:29:42

+0

我接受这个答案基于Jalil的结果,因为这个问题已经打开了这么久,这似乎是我们将得到的最好的答案。但作为问题的原始作者,我不能肯定地说这是否能解决我原来的问题,因为我不再有权访问该代码。 – 2012-06-05 19:39:07

0

它最有可能是与DPI相关的问题。检查designer.cs中的AutoScaleMode属性,然后尝试更改它(或添加一个)来设置窗体.AutoscaleMode = Font

+0

它已经设置为AutoScaleMode = Font,和我所有的其他表单一样。 – 2009-08-31 16:04:18

0

尝试在设计模式中锁定控件,然后查看它是如何实现的。

+0

我忽略提及它,但我尝试过。 – 2009-08-31 20:30:57

1

我PaulG认同,但它最有可能与DPI的问题

请从大(120DPI)为正常(96 DPI)更改您的显示卡的设置。

+0

这不适合我。 – Jalil 2012-06-04 10:45:55

2

WinForms编辑器是一个WYSIWYG,它需要编辑器实际执行布局代码,以便准确显示表单的外观。虽然非常方便,但有一些鸡肉和鸡蛋的问题开始对编辑造成严重破坏。

一个常见的问题是大小。有时候,控件属性的排序不正确(并且,自动生成,您无法修复此问题)。结果是一些需要的值不会在需要它的属性之后设置。一个着名的例子是SplitContainer和Panel2的MinSize(请参阅http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/ee6abc76-f35a-41a4-a1ff-5be942ae3425)。您可能遇到类似的根问题,但结果是您的控件的位置正在改变。

我将审查在设计你的属性的顺序,并尝试以确定是否可能是问题的根源。如果是这样,您可能需要在运行时设置一些属性。一般来说,很少有真正的“解决方法” - 解决方案通常不是“解决方法”。

这些类型的问题是创建WPF的动机的一部分。 XAML的声明性质有助于防止这类事件的发生,同时仍然提供所见即所得的感觉。

相关问题