分为两个部分的用户控件

时间:2019-05-08 04:32:20

标签: vb.net user-controls

我正在创建一个可折叠的面板控件,该控件包含一个可单击的标签,该标签停靠在顶部,顶部带有内部向上/向下箭头,下面的面板则设置为可填充其余控件,无论大小。 >

我还添加了代码以使控件在设计时可编辑。

<Designer("System.Windows.Forms.Design.ParentControlDesigner,System.Design", GetType(IDesigner))> _

我计划有多个此控件的“版本”,它们的行为将有所不同。例如;

  • 一个仅填充有动态创建的复选框,该复选框将保留所检查内容的运行列表。

  • 另一个包含手动或动态添加的单选按钮。

  • 另一个是手动设计的,等等

因此,每个版本都是一个包含原始版本的新控件。

但是我遇到了一个问题。当我向该用户控件添加控件(如tablelayoutplanel)并将其设置为Dock.Fill时。在设计时,它们看起来不错,添加的控件位于标签下方,但是一旦应用程序运行控件内部填充以使标签重叠,并且当执行停止时,更改也会反映在设计版本中。

因此,我试图找出是否有可能使用户控件由多个单独的“部分”组成;

  • 设计者无法访问的标签。

  • 下面的容器面板将包含所有内容并在设计时可访问。

除非我知道我的标签有多高,否则有一种方法可以覆盖Dock.Fill,使其最高位置从X开始。我宁愿避免执行调整所有内容大小的代码,因为我无法知道将来在手工制作的东西中可能会出现或可能不会出现多少东西。

我尝试查找可折叠面板的示例,但是到目前为止,当我从内置的或使用C#的VS的较旧版本迁移它们时,它们都导致设计器和代码错误。

此外,它们并没有真正实现我想要的外观。哪个是

Collapsible Panel

如果其中任何一个都无法完成,请告诉我,以便我尝试找出一种不同的方法来实现我所要达到的目标;一个东西会从标签的大小开始,然后打开/关闭,显示了ock.fill容器,该容器在打开时在其中具有控件,并且不会越过标签。

谢谢。

编辑:Added a quick video to show the behavior.

1 个答案:

答案 0 :(得分:0)

所以我能够达到我想要的效果,但是我不得不走一条完全不满意的路线。

我现在有两个控件作为“滑动面板”控件的一部分。

  • SlidePanelLabel

  • SlidePanelPanel

SlideLabelLabel位于它放下的父级的顶部,如果单击它,将基于parent.maximumsize.height扩大和缩小该父级,而不会真正影响自身。

SlidePanelPanel只是一个空的面板控件,其中包含一些替代功能,这些替代功能可处理带有滚动条的一些令人讨厌的情况。


一方面,这意味着我可以根据需要使用“标签”来扩大和缩小其他内容,并且可以对其进行扩展以提供一些定向功能。

另一方面,我真的很想弄清楚如何制作一个可以“产生”具有设计功能的对象的对象,例如Tab控件。 “标签”区域将阻止您向其中添加控件,但页面不会。

基本上,每当将SlidePanelLabel添加到某物时,它都会生成一个SlidePanelPanel,并且使生成的SlidePanelPanel能够将控件放在其上。

因此,除非有人对此有深入的了解,否则我认为这个问题可以解决。

我确实要感谢Jimi的帮助,并提供了有关停靠和锚固等方面的有用信息。