VC控件的group属性主要是为Radio Button服务的,其作用是把一组相关的radio button都group到一起,这几个radio button可以共用一个(整型)变量,从而简化代码。
VS2010中文版IDE的描述:
指定基于Tab键顺序的一组控件中的第一个控件。
描述有些拗口,下面举一个示例进行说明。
创建两组radio,一组描述颜色,另外一组描述fruit。每一组都设计了三个radio button。
另外设计一个Edit控件,显示用户的选择。UI效果如下:
Resource
这个对话框的资源代码如下:
IDD_GROUPTEST_DIALOG DIALOGEX 0, 0, 191, 163
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "GroupTest"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Color",IDC_STATIC,20,17,154,34
CONTROL "Red",IDC_RED,"Button",BS_AUTORADIOBUTTON | WS_GROUP,29,27,40,17
CONTROL "Green",IDC_GREEN,"Button",BS_AUTORADIOBUTTON,68,28,40,17
CONTROL "Blue",IDC_BLUE,"Button",BS_AUTORADIOBUTTON,117,28,40,17
GROUPBOX "Fruit",IDC_STATIC,21,62,152,43,WS_GROUP
CONTROL "Apple",IDC_APPLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,32,75,40,17
CONTROL "Orange",IDC_ORANGE,"Button",BS_AUTORADIOBUTTON,70,76,40,17
CONTROL "Banana",IDC_BANANA,"Button",BS_AUTORADIOBUTTON,120,76,40,17
LTEXT "Selection:",IDC_STATIC,22,115,83,8
EDITTEXT IDC_SELECTION,22,130,152,17,ES_AUTOHSCROLL | ES_READONLY
这里已经定义好了各个控件的tab顺序。
group
IDC_RED/Green/Blue这三个radio button是一组的,所以需要给第一个radio button(即IDC_RED)设置group属性,即设置为True;后面的两个radio button的group属性设置为false。以此说明这三个是一组。
表示color的最后一个radio button是IDC_BLUE,所以该控件接下来的分组框Fruit IDC_STATIC就需要设置为True,说明这个Fruit IDC_STATIC开始了一个新的分组。等价于说,IDC_RED/Green/Blue这三个radio button是一组,啰嗦了???
虽然,这个Fruit IDC_STATIC的group属性设置为False也不会有功能上的问题,但这种及时设置True表示终结一个group的划分,总是一个好的编程习惯罢。
类似地,可以了解接下来的三个Radio Button,即IDC_APPLE,IDC_ORANGE,IDC_BANANA的group属性。
可以看到在IDC_BANANA后面的”Selection:” IDC_STATIC没有设置group属性为True,尽管不是一个好的编程习惯,但不影响程序的功能。
为控件映射一个成员变量
对于group起来的一组radio button,只需要为第一个控件映射一个整型变量即可。如此,这一组的radio button对应的整数就分别为0,1,2,……。
int m_iColor;
int m_iFruit;
CString m_sSelection;
afx_msg void OnBnClickedRed();
afx_msg void OnBnClickedGreen();
afx_msg void OnBnClickedBlue();
afx_msg void OnBnClickedApple();
afx_msg void OnBnClickedOrange();
afx_msg void OnBnClickedBanana();
void UpdateSelection();
实现文件:
void CGroupTestDlg::OnBnClickedRed()
UpdateSelection();
void CGroupTestDlg::OnBnClickedGreen()
UpdateSelection();
void CGroupTestDlg::OnBnClickedBlue()
UpdateSelection();
void CGroupTestDlg::OnBnClickedApple()
UpdateSelection();
void CGroupTestDlg::OnBnClickedOrange()
UpdateSelection();
void CGroupTestDlg::OnBnClickedBanana()
UpdateSelection();
void CGroupTestDlg::UpdateSelection()
UpdateData(TRUE);
const size_t MAX_SIZE = 3;
static CString sColors[MAX_SIZE] = {"Red", "Green", "Blue"};
static CString sFruits[MAX_SIZE] = {"Apple", "Orange", "Banana"};
CString sColor("None"), sFruit("None");
if (m_iColor >= 0 && m_iColor < MAX_SIZE) sColor = sColors[m_iColor];
if (m_iFruit >= 0 && m_iFruit <= MAX_SIZE) sFruit = sFruits[m_iFruit];
m_sSelection.Format("Color(%d): %s; Fruit(%d): %s",
m_iColor, sColor,
m_iFruit, sFruit);
UpdateData(FALSE);
m_Group.Create(_T("Action"),
WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
CRect(20,200,200,300),
m_pWnd,
1000);
m_Group.ShowWindow(SW_SHOW);
一、对单选按钮进行分组: 每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。 如: Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组 设定Radio1属性:Group,Tabstop,Auto 设定Radio2属性:Tabstop,Auto 设定Radio3属性:Tabstop,Auto 设定Radio4
特点1:同一组内所有控件类型相同。
特点2:同一组内设置为Group属性的控件,大于其ID,小于下一个有Group属性的控件的ID的所有控件都是该组中的控件。
特点3:同一组内的所有控件是互斥的。
特点4:同一组中所有的控件只能由一个变量进行关联。
举例说明:
如上图,窗口上有6个Radio控件,将其分为两组A和B。
添加一个Group控件,在其中放入三个Radio Button控件,为Radio控件添加control类型的变量(添加变量时必须先把Group属性从false设置为true,否则无法添加变量)。
实现的方法:
1.首先我们要将三个radiobutton的layout设置成可以点击的,然后我们将这三个radio设置成不可以点击的,我们通过点击layout来实现,radiobutton的选中,通过设置 android:focusable="true" android:clickable="true"属性来实
多行列单选按钮组RadioButton的实现:合并多个RadioGroup为一组,为组内各按钮设置监听器,当本组按钮被选中时,清除其他Group中按钮的选中状态,达到多行列的单选按钮组的效果。代码实现简单,适合少量按钮的布局场景
在一个页面有多个相同的控件时,比如有多个相同的radio button,可以用一个组来实现,在第一个控件属性中选中group,给这组控件设置一个相关联的成员变量。那么第一个radio控件的值将会是0,接着会是1,2,3…,它会直到下一个标有group的相同控件为止。这样可以更方便的进行程序设计。