单选框控件 (SRadioBox)¶
Warning
The current page still doesn't have a translation for this language.
You can read it through google translate.
单选框是一种互斥选择控件,在一组选项中只允许选择一个选项。通常用于用户需要在多个选项中做出唯一选择的场景。
基本信息¶
- 类名:
SRadioBox
- 控件标签:
radio
- 基类:
SWindow
- 功能:提供互斥的选项选择
属性说明¶
基本属性¶
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
checked | bool | 0 | 初始化时的选中状态(0-未选中,1-选中) |
text | string | - | 选项文本 |
align | string | left | 水平对齐方式(left/center/right) |
valign | string | middle | 垂直对齐方式(top/middle/bottom) |
外观属性¶
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
skin | string | - | 默认皮肤 |
focusSkin | string | - | 焦点状态显示的皮肤 |
colorText | color | - | 文本颜色 |
colorTextHover | color | - | Hover状态文本颜色 |
colorTextPush | color | - | Push状态文本颜色 |
colorTextDisable | color | - | Disable状态文本颜色 |
font | string | - | 文本字体 |
fontHover | string | - | Hover状态文本字体 |
fontPush | string | - | Push状态文本字体 |
fontDisable | string | - | Disable状态文本字体 |
状态属性¶
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
enable | bool | 1 | 是否可用(0-不可用,1-可用) |
visible | bool | 1 | 是否可见(0-不可见,1-可见) |
display | bool | 1 | 控件隐藏时是否占位(0-不占位,1-占位) |
使用示例¶
基本单选框组¶
<window>
<radio name="radio1"
pos="10,10,150,30"
text="选项1"
checked="1"/>
<radio name="radio2"
pos="10,40,150,60"
text="选项2"/>
<radio name="radio3"
pos="10,70,150,90"
text="选项3"/>
</window>
(移除分组单选框示例,因为分组使用方式已在"最佳实践"中说明)
(保持这部分内容不变,因为自定义样式示例已经正确)
事件处理¶
单选框控件支持以下事件:
事件名 | EventID | 说明 |
---|---|---|
EVT_CMD | EventCmd::EventID | 命令事件(点击时触发) |
EVT_STATE_CHANGED | EventStateChanged::EventID | 状态改变事件 |
// 事件处理示例
EVENT_MAP_BEGIN()
EVENT_NAME_COMMAND(L"radio1", OnRadio1)
EVENT_NAME_HANDLER(L"radio1", EventStateChanged::EventID, OnRadioStateChanged)
EVENT_MAP_END()
void OnRadio1()
{
// 处理单选框点击
}
void OnRadioStateChanged(IEvtArgs *pEvt)
{
EventStateChanged *pRealEvt = sobj_cast<EventStateChanged>(pEvt);
int nNewState = pRealEvt->GetNewState();
// 处理状态改变
}
分组管理¶
创建分组¶
// 查找分组中的选中项
SRadioBox *FindCheckedInGroup(const SStringW &groupName)
{
SWindow *pRoot = GetRoot();
SWindow::Iterator it(pRoot);
while(*it) {
SRadioBox *pRadio = sobj_cast<SRadioBox>(*it);
if(pRadio && pRadio->GetGroupName() == groupName
&& pRadio->IsChecked()) {
return pRadio;
}
++it;
}
return NULL;
}
组操作示例¶
// 选中指定组中的项
void SelectGroupItem(const SStringW &groupName, int index)
{
int curIndex = 0;
SWindow *pRoot = GetRoot();
SWindow::Iterator it(pRoot);
while(*it) {
SRadioBox *pRadio = sobj_cast<SRadioBox>(*it);
if(pRadio && pRadio->GetGroupName() == groupName) {
pRadio->SetCheck(curIndex == index);
curIndex++;
}
++it;
}
}
样式定制¶
自定义皮肤¶
<style>
<class name="radioStyle"
font="face:微软雅黑,size:14"
colorText="#333333"
skin="skin_radio"/>
</style>
<radio class="radioStyle"
text="样式化单选框"/>
状态定制¶
单选框支持多种状态的外观定制: - 未选中状态 - 选中状态 - 禁用状态 - 焦点状态
最佳实践¶
- 合理分组:将相关的单选框放在同一容器内,形成逻辑组
- 默认选项:为单选框组设置一个合理的默认选中项
- 视觉反馈:使用 focusSkin 提供焦点状态的视觉反馈
- 文本样式:通过不同状态的字体和颜色属性增强用户体验
- 语义标签:为每个选项提供清晰明确的文本标签
常见问题¶
选中状态异常¶
- 检查分组设置
- 确认事件处理逻辑
- 验证互斥性
外观问题¶
- 检查皮肤资源
- 确认样式设置
- 验证状态切换
事件响应¶
- 检查事件绑定
- 确认控件状态
- 验证分组逻辑
相关控件¶
- 复选框(SCheckBox) - 多选控件
- 开关按钮(SToggle) - 另一种开关控件
- 按钮(SButton) - 基础交互控件