visual-studio - 用于在两个组框之间切换的互斥单选按钮
问题描述
我想实现:
- 在 init () 上,两个组框都被隐藏,并且 GRP A 和 GRP B 单选按钮都启用了 [ACHIEVED]。
- 我单击 GRP A 单选按钮,GRP 框 1 显示 GRP B 单选按钮变灰。[达到]。
- 取消选中 GrP A 单选按钮 GRP Box 1 隐藏启用的 GRP A 和 B 单选按钮 [失败:无法取消选中所选单选按钮]。
- 选中 Group Box B 单选按钮的过程与上述相同。
解决方案
您正试图“打破”单选按钮的概念。“GRP A”和“GRP B”按钮(假设它们在同一个“组”中)将自动相互排斥,只要两者都启用- 您必须选中其中一个按钮(即使有 3或更多在同一组中)。因此,在您的情况下,要取消选中“GRP A”,您需要选中“GRP B”。
当然,除非您覆盖这些单选按钮的默认处理。
要覆盖默认处理,您可以为BN_CLICKED
来自“GRP A”和“GRP B”按钮中的每个按钮的消息提供一个处理程序,并在该处理程序中将两个按钮的状态显式设置为未选中和启用。您还可以在该处理程序中放置代码以隐藏两个组(或在适当时显示一个)。
下面是可能的代码的大纲,假设您的父对话框来自CDialog
并且两个单选按钮的 ID 是IDC_GRPA
和IDC_GRPB
:
BEGIN_MESSAGE_MAP(MyDialog, CDialog)
ON_CONTROL(BN_CLICKED, IDC_GRPA, &MyDialog::OnClickA)
ON_CONTROL(BN_CLICKED, IDC_GRPB, &MyDialog::OnClickB)
//... other handlers and message map entries
END_MESSAGE_MAP()
// Handler for a "GRP A" button click:
void MyDialog::OnClickA()
{
UINT checked = IsDlgButtonChecked(IDC_GRPA);
if (checked == BST_CHECKED) {
GetDlgItem(IDC_GRPB)->EnableWindow(TRUE); // ENABLE other button
CheckDlgButton(IDC_GRPA, BST_UNCHECKED); // Clear this button
CheckDlgButton(IDC_GRPB, BST_UNCHECKED); // and the other one
// Now do the required stuff to HIDE the group boxes...
}
else {
CheckDlgButton(IDC_GRPA, BST_CHECKED); // Check this button
GetDlgItem(IDC_GRPB)->EnableWindow(FALSE); // DISABLE other button
// Now do the required stuff to SHOW the "GrpBox 1" controls ...
}
}
// The "OnClickB()" handler will be very similar to the above, but with the IDs 'reversed'.
请随时要求任何进一步的澄清和/或解释。
推荐阅读
- javascript - ReactJS:如何在 JavaScript 中过滤数组以在地图上显示特定图像
- c# - Azure 功能未“等待”任务完成
- javascript - 用户注册或登录时是否应该创建 Token?
- flutter - 使用 canvas.drawVertices 更改顶点和线条的颜色
- javascript - 以离子和角度将变量从 .ts 传递到 .html
- list - 试图找到一种在powershell中列出两个日期之间的所有星期五日期的方法
- python - 如何从 django 中的表中检索 comment_replies
- python - 如何根据两个熊猫数据框参数的当前值控制在函数中应用哪个公式?
- java - 未找到 maven-compiler-plugin
- javascript - 使用 JavaScript 访问 localStorage 数据