13.单选框UIRadioButton类

UIRadioButton和CheckBox的唯一区别是左侧图像不同,所以只需从CheckBox继承即可,只不过在构造函数中需要改变使用的图像。

单选框使用的图像如下:

radioButton使用的图像

单选框代码非常简单:

namespace StunEngine.SceneNodes.UI
{
    /// <summary>
    /// 单选框控件
    /// </summary>
    public class UIRadioButton:UICheckBox 
    {
        /// <summary>
        /// 创建一个单选框控件
        /// </summary>
        public UIRadioButton(StunXnaGE engine, Scene setScene)
            : base(engine, setScene,"RadioButton", "Textures/UI/UIRadioButton")
        { }
    }
}

但在实际应用中,单选框通常都是成组应用的,所以需要新建一个RadiuButtonGroup类,用以管理多个RadiuButton。

RadiuButtonGroup类的主要功能是:

RadiuButtonGroup类代码如下:

namespace StunEngine.SceneNodes.UI
{
    /// <summary>
    /// radioButton组
    /// </summary>
    public  class UIRadioButtonGroup:UISceneNode
    {
        /// <summary>
        /// 单选框数组
        /// </summary>
        UIRadioButton[] radioButtons;

        /// <summary>
        /// 各radioButton之间的垂直间距。
        /// </summary>
        float verticalSpace = 10.0f;        

        /// <summary>
        /// 被选中的单选框索引,初始时为-1,即没有单选框被选中。
        /// </summary>
        int selectedIndex = -1;       

        /// <summary>
        /// 创建一组单选框
        /// </summary>        
        /// <param name="engine">引擎</param>
        /// <param name="setScene">控件所属的scene</param>
        /// <param name="setPosition">2D屏幕位置</param>
        /// <param name="radiobutton">单选框数组</param>
        public UIRadioButtonGroup(StunXnaGE engine, Scene setScene, Vector2 setPosition, UIRadioButton[] radiobuttons)
            : base(engine,setScene ,setPosition ,null)
        {
            //UIRadioButtonGroup没有焦点
            this.TabStop = false;
            
            this.radioButtons = radiobuttons;
            
            //向下依次放置各个radioButton
            float radioButtonY = 0;            
            for (int i = 0; i < radiobuttons.Length; i++)
            {
                radiobuttons[i].CheckedChanged+=new EventHandler(OnCheckedChanged);
                radiobuttons[i].CanUncheck = false;
                if (radiobuttons[i].Checked  == true)
                    selectedIndex = i;                
                
                radiobuttons[i].Position =new Vector2 (setPosition.X, setPosition.Y + radioButtonY);
                radioButtonY += radiobuttons[i].Size.Y + verticalSpace;                
            }
            
        }        

        属性

        事件相关处理程序

        单元测试
    }
        
}

单元测试截图如下:

单元测试截图


发布时间:2010/1/20 下午4:42:39  阅读次数:7076

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号