【问题标题】:How to prevent auto-selection of radio buttons如何防止自动选择单选按钮
【发布时间】:2015-09-03 22:40:20
【问题描述】:

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

对于Gtk,这已经在一定程度上讨论过in another questionthe selected answer 的主要观点是用户希望始终选择一个单选按钮强>。

我对此没有异议。

但是,我会自动生成我的用户界面,因此每个单选按钮都链接到一个数据模型,但是 任何单选按钮都不能在任何时候获得对其他任何@的引用987654331@ 个实例。数据模型确保始终选中一个单选按钮。

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

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

将单选按钮的Active property 设置为false 无济于事,调用Toggle method 也无济于事。

有没有办法抑制这种自动选择,可能是通过子类化和覆盖我还找不到的东西?或者,是否有可能为此目的强制 CheckButton 看起来像一个单选按钮?

如果真的没有其他解决方案,我将尝试实施another answer 中建议的解决方案,该解决方案涉及为我的每个单选按钮添加第二个隐藏单选按钮,但我会发现这对于生产代码非常麻烦。

【问题讨论】:

  • 为什么你不能直接循环单选按钮并取消选中它们?使用继承自 GtkToggleButton 的 gtk_toggle_button_set_active()....
  • @ymz:因为按钮似乎不接受该值。他们确保每组至少有一个按钮保持选中状态。
  • 我通常不会建议这个(作为官方文档)但是...... gtk_toggle_button_toggled 可能会成功
  • @ymz:嗯,RadioButton 有一个Toggle() method,这似乎是一回事,但它不会产生任何可见的结果。 RadioButton 可能会自动重新建立其状态。
  • 如果您仅在创建 UI 之后创建该组,它对您有用吗?您可以观察您的 UI 并获得该单选按钮。现在,我没有 gtk# 经验,所以这只是一个建议。

标签: radio-button gtk#


【解决方案1】:

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

【讨论】:

  • 虽然这仍然是 hacky,但它至少很好地将 hackiness 封装到一个封闭的组件中。所以,由于没有更好的答案,我会接受这个。
【解决方案2】:

单选按钮类似于检查按钮,不同之处在于它们是分组的,因此一次只能选择/按下一个。

他们需要一个团队来正确履行职责。

尝试从下到上的解决方案,它不是那么hacky,只需尝试添加一个始终被选中的隐藏单选按钮。

【讨论】:

  • 这可能是个人解释的问题,但我真的怀疑说“它不是那么 hacky”会使使用始终隐藏的小部件变得不那么 hacky ;)
  • 确实如此。但是,如果没有其他解决方案……就这样吧。 ;)
  • 丑陋/肮脏的解决方案 - 但实际上想提出与没有更好的想法一样的建议......希望没有太多的数据可以表示......
猜你喜欢
  • 2021-02-15
  • 2016-02-12
  • 2018-10-11
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2018-07-15
相关资源
最近更新 更多