2015-09-03 53 views
7

将Gtk#RadioButton class的实例添加到GUI时,它会作为其单选按钮组的第一个成员自动选中(“激活”)。如何防止单选按钮的自动选择

对于基于GTK,这已被讨论在某种程度上in another question,随着the selected answer要点在于用户希望一个单选按钮,以在所有时间来选择。

我不反对。

不过,我会自动生成我的用户界面的方式,使每个单选按钮链接到一个数据模型,但没有一个单选按钮可以在任何时候,得到一个参考任何其他RadioButton的实例。数据模型确保一直检查一个单选按钮。

除了足以匹配用户的期望外,我认为这是一种很好的做法,像这样,数据完整性由数据模型确保,而不是由GUI确保。

不幸的是,Gtk#会自动检查全部这样的单选按钮,因为它认为每个单选按钮是其组中的第一个单选按钮。为了将各种单选按钮添加到同一组中,我必须将组中的第一个单选按钮传递给其他单选按钮的构造函数 - 我不能像上面指出的那样,因为我没有办法获取实例化其他人时对第一个单选按钮的引用。

将单选按钮的Active property设置为false没有帮助,也没有调用Toggle method

是否有任何方法来抑制这种自动选择,可能是通过继承和覆盖我找不到的东西呢?或者,是否可以强制CheckButton看起来像一个单选按钮来达到这个目的?

如果真的是有没有其他解决办法,我会尝试和实施该解决方案在another answer这涉及添加第二个隐藏的单选按钮,我的每个单选按钮的建议,但我会找到的生产代码,非常哈克。

+0

为什么你不能只是循环单选按钮和**取消选中**全部?使用继承自GtkToggleButton的gtk_toggle_button_set_active().... – ymz

+0

@ymz:因为按钮似乎不接受该值。他们确保每组至少有一个按钮保持被检查。 –

+0

我通常不会建议这个(作为官方文档),但...gtk_toggle_button_toggled可能会诀窍 – ymz

回答

1

Josip解决方案的扩展:创建您自己的单选按钮小部件,实际上只包含两个gtk单选按钮,其中一个总是隐藏。你的工厂然后创建这个,而不是原来的gtk按钮...

+0

虽然这仍然是hacky,它至少很好地封装诡异成一个封闭的组件。所以,由于缺乏更好的答案,我会接受这一个。 –

1

单选按钮与检查按钮类似,除了它们被分组以便一次只能选择一个按钮。

他们要求一个组正确履行职责。

尝试下来的解决方案,它不是很冒险,只是尝试添加一个总是被选中的隐藏单选按钮。

+0

这可能是一个个人解释的问题,但我真的怀疑“这不是很冒险”使得使用一个总是隐藏的小部件;) –

+0

没错。但如果没有其他解决方案......就这样做。 ;) –

+0

丑陋/肮脏的解决方案 - 但实际上想提出一样没有任何更好的想法...希望没有太多的数据来表示... – Aconcagua