Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使Windows窗体在控件添加/删除或隐藏/显示时自适应地更改其高度?_C#_.net_Winforms_Visual Studio - Fatal编程技术网

C# 如何使Windows窗体在控件添加/删除或隐藏/显示时自适应地更改其高度?

C# 如何使Windows窗体在控件添加/删除或隐藏/显示时自适应地更改其高度?,c#,.net,winforms,visual-studio,C#,.net,Winforms,Visual Studio,我需要的可能被描述为“反向锚定”、“反向船坞”或类似的东西(我之所以选择提及这一点,是因为“反向锚定”在搜索关于这个主题的可能已经提交的问题和答案时,作为关键词候选词,我首先想到的恰好是这个问题和答案,也许这将有助于人们将来以类似的方式找到这个问题)。WinForms控件实现Anchor属性,以便在包含控件/窗体大小更改时设置自适应调整大小,但我需要相反的设置-窗体根据控件自适应调整大小 给任务增加一点复杂性的一点是,要添加/删除/显示/隐藏/启用/禁用的控件(可能还需要调整大小-到目前为止,还

我需要的可能被描述为“反向锚定”、“反向船坞”或类似的东西(我之所以选择提及这一点,是因为“反向锚定”在搜索关于这个主题的可能已经提交的问题和答案时,作为关键词候选词,我首先想到的恰好是这个问题和答案,也许这将有助于人们将来以类似的方式找到这个问题)。WinForms控件实现
Anchor
属性,以便在包含控件/窗体大小更改时设置自适应调整大小,但我需要相反的设置-窗体根据控件自适应调整大小

给任务增加一点复杂性的一点是,要添加/删除/显示/隐藏/启用/禁用的控件(可能还需要调整大小-到目前为止,还没有直接需要此功能,但我怀疑它可能会成为与非默认Windows视觉样式和主题兼容的必需功能,这些样式和主题可能会不可预测地影响控件大小,并且在应用程序运行的任何时刻都可能发生变化)不会是窗体上的最后一个按钮-一行按钮将始终位于volatile组的最后一个控件和窗口下边框之间

实际任务是设计一个表单,该表单将显示一个对象集合,其中每个对象对应一行控件(一个标签、一个文本框和0-2个按钮),最好只使用非常基本的“公共控件”,避免网格、列表和类似的内容(将它们包装在额外的容器控件(如面板)中是完全可以接受的,但是,如果这真的可以使解决方案更简单、更可靠或更好,也可以考虑将它们抽象到单独的“用户控件”中,使用手写代码操纵控件和表单大小也是完全可以接受的(我很难期望“设置一个神奇的属性,然后它就完成了”这样的解决方案存在于这个任务中),但我到目前为止还没有找到一个可靠的算法(什么时候改变什么属性,用什么公式来计算新值))

最大容量可以安全地限制在接近10的范围内(或者20个,也许,但不能超过-在一个表单上显示更多的内容是绝对不合理的(前提是不能选择滚动))因此,这两种方法都是可以接受的:在运行时添加/删除控件,或者在设计器中将它们放在窗体上,只需在代码中操作
可见的
和/或
启用的
属性。顺便说一下,我发现
可见的
有一个问题-在窗体呈现之前,它会被框架内部关闭并重新打开游戏中出现了ERD和其他控件
Anchor
properties,但我不认为总是以同样的方式依赖它是一个好主意,因此只需在控件
可见的
属性上调整表单
大小
属性就感觉不太方便了)

与实现这种行为相关的一些好主意是什么


PS:据我所知,这是WPF的一项自然功能,但我将使用WinForms使该应用程序在Mac电脑上运行,或者在Mono的帮助下在其他非Windows平台上运行。

我将告诉您一些线索,可能对您有所帮助:

1-正确构建自己的处理所有问题的程序

2-我建议使用向导方法(下一步/上一步按钮),因此,如果平板电脑或智能手机很小,则上述过程将决定向导的每个框架中有多少控件组合(标签、文本框、选项按钮…),并保留下一步按钮的剩余控件

3-顺便说一句,如果要隐藏某些控件,请使用原始事件激发来运行上述过程。(类似于启动窗体的基本按钮,因此不依赖于可见/调整大小事件)。

4-在上述过程的最后一部分中,调整向导每个表单的大小


如果仍然存在问题,请告诉我,我希望我能提供帮助:-)

这和这个问题相似吗@Srikanth谢谢!我花了一些时间搜索相关的东西,但出乎意料的是,我什么也找不到。现在我将研究这个问题和答案,如果我没有发现这个问题在某些重要方面有什么不同的话,也许会删除这个问题。有太多的方法可以做到这一点。可能是FlowLayoutPanel的AutoSize=true、窗体的AutoSize=true和FLP中“行”的UserControl是最简单的。用户不喜欢没有明确定义大小的主窗口,顺便说一句,他们可能会将其最大化。@HansPassant你是说你提到的所有东西都要同时使用吗?至于用户体验部分-大小很少(如果有的话)在表单实际显示后将被更改,并且最大化按钮将被禁用,因为它将是一个模式对话框。谢谢,但向导方式确实是一种过度使用。尽管我提到了多达20个字段是一个合理的限制,并且拒绝了可能显示更多、超过5个控制行的想法(默认情况下,每一个按钮的高度都与按钮一样高)显示将是一种极为罕见的情况。实际计数几乎总是2-4左右,几乎永远不会(真的,我无法想象这种情况)接近10。我正在设计的表单是一个通用/灵活的对话框,要求用户快速设置几个参数,然后按ok/cancel