Winforms用户控件在另一个用户控件中被剪裁(有时)

时间:2008-10-24 05:30:50

标签: winforms visual-studio-2005

问题相当简单,但最好用视觉说明。请注意,所有屏幕截图均来自Visual Studio 2005设计图面。我注意到在实际运行应用程序时没有区别。

这是我的用户控件(让我们称之为UC-1):

alt text

控件上的按钮设置为锚定到Bottom + Right。

以下是放置在特定父用户控件(UC-A)上时的样子:

alt text

请忽略颜色等方面的差异。一些样式在用户控件的构造函数中完成。

注意控件的底部被剪裁了。父节点上消耗控件的实例设置为“FixedSingle”边框。另请注意,消耗的控件比原始控件高,表示按钮底部锚点设置正在被尊重,但基本上应该超出应有的位置。

要确认这肯定是父控件上的问题,请注意放在同一父级上时包含数据网格视图的另一个用户控件(UC-2):

alt text

同样,消耗控件的实例设置为“FixedSingle”边框,这有助于说明裁剪。数据网格正确锚定到右下角。为了加强这个问题的困惑,这是放在不同的父用户控件(UC-B)上的第一个用户控件(UC-1):

alt text http://i38.tinypic.com/2rnyjd0.png

这是表格消费时的第二个“消耗”控件(UC-2):

alt text

注意,这次没有剪辑。

我花了很多时间搜索并尝试解决这个问题。我已经筋疲力尽了各种设置的边距,填充,大小(最小/最大),位置,锚点...等我不能为我的生活找出为什么这一个用户控件导致子用户控件像这样剪辑

我注意到的另一个奇怪的事情是,当我在父用户控件设计界面(控件行为不当)上执行UNDO时,即使撤消操作与这些控件无关,剪切的用户控件实例实际上也会移位。例如,如果我使main包含控件更大,然后撤消,则会跳出一些子用户控件。它们似乎在被修剪时移动。很可疑。

有没有人知道发生了什么?

3 个答案:

答案 0 :(得分:1)

一个非常有趣的问题!

您的问题父(UC-A)是否会覆盖调整大小或客户区域的任何方法?

或者UC-A的填充或保证金的底值是否为负值?

UC-A的底部还有其他东西吗?也许,某些东西的尺寸是负的?

或者,UC-A是否设定了其子控件的约束?如果面板的最小高度被迫太大,你会得到这个结果。

希望这有用!如果没有,您是否有机会将来源发布到UC-A?

答案 1 :(得分:1)

我遇到了完全相同的问题,并在搜索可能的解决方案时找到了您的帖子。虽然我很确定这是winforms中的一个错误,但我发现了一些解决方法。只需将用户控件中的所有内容放在面板中,将面板对齐,然后在面板内进行锚定。这似乎缓解了这个问题,虽然我的按钮确实倾向于显示与父控件中应该稍微不同的大小。很奇怪。我通过在设计器中使按钮变小来补偿,并且由于某些未知原因它在父控件中延伸了几个像素。希望这会有所帮助。

答案 2 :(得分:0)

假设所讨论的父控件不是标准的.NET框架类型,而是一个自定义的类型,我猜它是在客户端和屏幕坐标的某个地方混合逻辑。但这只是猜测。