背景
在.NET Windows Forms (2.0) 中,单选按钮会自动按其容器控件进行分组,无论是 Form、Panel 还是 GroupBox。
这意味着当您选择一个单选按钮时,同一容器中的其他单选按钮会自动变为未选中状态。
现在,考虑以下表单布局:
MUST HAVE NICE TO HAVE DESCRIPTION
--------- ------------ -----------------------------------------------
[ ] [ ] The gizmo works
[ ] [ ] The gizmo works beautifully
[ ] [ ] The gizmo works amazingly and makes you breakfast
[ ] [ ] The gizmo comes with a pony
- 每个
'[ ]'
都是一个单选按钮。 - 用户被要求在第一列中选择必填答案,在第二列中选择可选的(期望的,最佳情况下的)答案。
正如您所看到的,单选按钮应该按列分组:选择其中一个单选按钮应清除该列的其余部分,但不应对另一列产生影响。
问题
基本上,问题是这是一个动态生成的表单。
- 布局中的行数是动态的,并且从可配置的表单定义中加载。
- 描述文本直到运行时才知道,长度差异很大(有些可能只有几个单词,而其他一些则有十几行)。
- 布局不能重新设计。这来自于(非技术性)用户对已使用多年的纸质版本此表单的熟悉程度。此表单也将被打印,即使我更改了表单的输入系统,这也意味着需要使用“旧”布局编写另一个用于打印的版本。
我尝试过但未成功的方法
我首先尝试使用三个面板之一实现这个动态生成的布局,因此自动单选按钮分组将正常工作。它确实如此。
但是与单选按钮及其文本之间的水平对齐相关的布局问题让我很困扰。文本的大小直到运行时才知道,文本行可能会换行(有时每个项目都会多次换行)。有时它对齐得很好,有时则没有。我即将开始调试,但我在思考也许改变这个三面板实现是更好的选择。
我正在尝试做什么
我想通过使用一个具有三列的TableLayoutPanel
重新设计布局,以简化与对齐相关的问题,但这意味着我不能使用自动单选按钮容器分组“功能”。
编辑:
如Gerrie建议的那样,其他布局选项是将每行实现为用户控件并使用流式布局面板。
这意味着,再次,我可能希望使用控件进行布局,但不用于单选按钮分组。
我需要垂直单选按钮组,尽管使用了水平用户控件
/编辑
我要求的是
我需要关于如何手动控制单选按钮分组的指针和建议。如果需要,我真的不介意子类化RadioButton
类。
在Windows Forms中,分组“魔法”是如何工作的?
我在谷歌上找到的所有解决方案都是基于某种方式使用容器进行分组的自定义单选按钮组或“单选按钮列表”。可以避免使用容器吗?如果可以,怎么做?。