MFC"警告:跳过组中的非单选按钮。"

时间:2020-03-06 14:41:39  来源:igfitidea点击:

在Visual Studio的调试器中运行旧的MFC应用程序时,在"输出"窗口中看到了很多警告,如下所示:

Warning: skipping non-radio button in group.

我了解在MFC中,我们将单选按钮分组放置以指示哪些单选按钮组合在一起。如果我没有记错的话,我们可以通过将第一个单选按钮的" group"属性设置为true,然后将其余的单选按钮的" group"属性设置为false来完成此操作。

关于此警告,我有三个问题。

  • 我们如何摆脱此警告?我们是否必须将所有非单选按钮控件的" group"属性设置为true以避免发生这种情况,还是应该将它设置为最后一个单选按钮之后的第一个控件?
  • 有没有一种简单的方法来找出哪些控件或者对话框有此问题?我可以打开每个对话框并摆弄它,直到弹出警告为止。但是,此应用程序有很多对话框,因此,如果有一种更简单的方法,那就太好了。
  • 如果不解决此警告,将会发生什么负面行为?换句话说,这是否重要?

解决方案

也许检查一下标签顺序(格式/制表符顺序),听起来好像在一组单选按钮的中间有一个普通按钮。如果确实存在问题,则可以使用"格式/制表顺序"菜单项来解决此问题,然后以正确的顺序单击控件。

该警告表示该组中第一个和最后一个单选按钮之间的选项卡顺序中除了单选按钮之外还有其他控件。设置了WS_GROUP样式的控件标记了组的开始。

要解决此问题,请使用对话框编辑器更改选项卡顺序,并确保所有单选按钮均按顺序编号。执行此操作的另一种方法是在文本编辑器中打开.rc文件,并更改每个对话框资源中语句的顺序(选项卡顺序仅由控件列出的顺序定义)。

如果单选按钮分组工作正常,我认为我们可以放心地忽略此警告。

在这里的回答与旧论坛中的一些研究之间,我认为我至少已经弄清楚了如何解决我的问题。这是我针对上述问题所发现的。

  • ChrisN和Smashery建议我重新排列选项卡的顺序,以确保单选按钮按顺序排列,这确实解决了一些警告。此外,单选按钮组之后按Tab键顺序的第一个控件必须具有WS_GROUP属性设置(或者在编辑器中将group属性设置为true)。这告诉MFC单选按钮组已结束。没有它,所有剩余的控件都将按选项卡顺序排列,直到下一个WS_GROUP将生成警告。完成上述两项操作后,这些对话框中的警告就消失了。
  • 这仍然是一个悬而未决的问题,在没有打开每个对话框并等待警告的情况下,我找不到找到这些问题的好方法。如果我们知道对话框正在创建此警告,但我们不知道是由什么控件引起的,则可以在生成警告的TRACE()调用的DDX_Radio()函数中设置一个断点。这样可以更轻松地确定所抱怨的特定控件。
  • 我同意ChrisN的看法,除了让我们仔细检查制表符顺序之外,我无法想到此警告。在网上其他地方,我找不到其他任何可能引起此问题的参考。

对于第2点,这就是为什么我认为我们对此没有答案的原因,所以我无法对所有带有单选按钮的对话框进行文本搜索(* .rc)来简化任何操作。对于每个匹配,请目视检查资源代码以解决此问题,并进行更正。我会手动在资源文件的源代码中进行此操作,而不是尝试与gui设计器一起使用。