.net 如何避免Windows窗体单选按钮容器自动分组
背景 在.NET(2.0)中,单选按钮根据其容器控件自动分组,无论是窗体、面板还是GroupBox 这意味着,当您选择一个单选按钮时,同一容器中的每个其他单选按钮都会自动更改为未选中状态.net 如何避免Windows窗体单选按钮容器自动分组,.net,winforms,layout,radio-button,.net,Winforms,Layout,Radio Button,背景 在.NET(2.0)中,单选按钮根据其容器控件自动分组,无论是窗体、面板还是GroupBox 这意味着,当您选择一个单选按钮时,同一容器中的每个其他单选按钮都会自动更改为未选中状态 现在,考虑下面的表单布局: MUST HAVE NICE TO HAVE DESCRIPTION --------- ------------ ----------------------------------------------- [ ] [ ] The giz
现在,考虑下面的表单布局:
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
类进行子类化
具体地说,是否有任何“规范”或已知的方法对“RadioButton”进行子类化,或一直到Win32 API,以便每次检查控件时(通过使用鼠标、键盘输入、空格键和我不知道的任何其他方式选择它们)我可以捕获事件并手动更新窗体上每个其他控件的状态,并且自动分组功能众所周知是“取消激活”的?我担心该实现也与容器相关,我可能还被迫将Panel?子类化
分组“魔力”在Windows窗体中是如何工作的
我在谷歌上找到的每个实现自定义单选按钮组或“单选按钮列表”的解决方案都以某种方式为组使用容器为基础。可以避免使用集装箱吗?如果是这样,怎么做?我会选择一个简单明了的解决方案。例如,表示一行的自定义控件(即两个单选按钮和一个标签) 编辑:好的,我想我现在明白你的要求了。你就不能有两组单选按钮:A列和B列中的单选按钮吗 在绘制表单时,将它们添加到两个列表或任何内容,并将它们绑定到两个单独的事件:columnARBChecked、columnBRBChecked。当其中一个事件触发时,您可以调用一些逻辑来检查/取消检查其余的单选按钮。我发现的一个临时解决方案是,我将每个单选按钮和每个单选按钮放在自己的小面板中。所以它们之间根本没有分组。我正在收听每个按钮
选中的事件,并相应地更新相应的事件
我仍然认为有这么多的面板太过分了,如果有人有更干净的解决方案,我很乐意听到
(好的,很抱歉回答我自己的问题。你知道,当你花时间解释某件事时,你开始从另一个角度看待问题。)这将取代用于布局目的的TableLayoutPanel。此解决方案的问题是,用户控件内的按钮仍将分组在用户控件内。因此,我将拥有与用户控件实例一样多的组,而不是两个组(每列一个)。那么我恐怕无法完全理解您的需求。你想要水平分组,对吗?为什么您也需要垂直面板?为什么你不能在自定义控件集合上循环并读取选中的单选按钮?对不起,我将编辑问题以澄清事实上水平分组(默认情况下会发生)不是我需要的,而是垂直分组。谢谢。问题不在于知道检查了哪些控件。问题是,当用户检查其他单选按钮是否在同一容器中时,winforms会自动取消选中其中一个单选按钮。我不希望发生这种情况。关于你的编辑:是的,那是