Skip to content

单选框控件 (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="样式化单选框"/>

状态定制

单选框支持多种状态的外观定制: - 未选中状态 - 选中状态 - 禁用状态 - 焦点状态

最佳实践

  1. 合理分组:将相关的单选框放在同一容器内,形成逻辑组
  2. 默认选项:为单选框组设置一个合理的默认选中项
  3. 视觉反馈:使用 focusSkin 提供焦点状态的视觉反馈
  4. 文本样式:通过不同状态的字体和颜色属性增强用户体验
  5. 语义标签:为每个选项提供清晰明确的文本标签

常见问题

选中状态异常

  • 检查分组设置
  • 确认事件处理逻辑
  • 验证互斥性

外观问题

  • 检查皮肤资源
  • 确认样式设置
  • 验证状态切换

事件响应

  • 检查事件绑定
  • 确认控件状态
  • 验证分组逻辑

相关控件