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

问题描述 投票:0回答:3

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

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

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

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

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

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

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

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

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

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

注意,这次没有剪辑。

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

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

有谁知道发生了什么事?

winforms visual-studio-2005
3个回答
1
投票

一个非常有趣的问题!

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

或者UC-A的Padding或Margin底值是否为负值?

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

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

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


1
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.