GroupBox控件

GroupBox控件常常用于逻辑地组合一组控件,如RadioButton 及 CheckBox控件,显示一个框架,其上有一个标题。

组框的用法非常简单,把它拖放到窗体上,再把所需的控件拖放到组框中即可(但其顺序不能颠倒--不能把组框放在已有的控件上面)。其结果是父控件是组框,而不是窗体,所以在任意时刻,可以选择多个RadioButton。但在组框中,一次只能选择一个RadioButton。

这里需要解释一下父控件和子控件的关系。把一个控件放在窗体上时,窗体就是该控件的父控件,所以该控件是窗体的一个子控件。而把一个GroupBox放在窗体上时,它就成为窗体的一个子控件。而组框本身可以包含控件,所以它就是这些控件的父控件,其结果是移动GroupBox时,其中的所有控件也会移动。

把控件放在组框上的另一个结果是可以改变其中所有控件的某些属性,方法是在组框上设置这些属性。例如,如果要禁用组框中的所有控件,只需把组框的Enabled属性设置为false即可。

下面用一个示例说明GroupBox控件的用法。

试试看:RadioButton和CheckBox示例

下面修改用于说明文本框用法的TextBoxTest示例。在该示例中,惟一可能的职业是程序员。下面不强迫用户填写程序员,而是把这个文本框改成复选框。为了说明RadioButton的用法,我们将要求用户再提供一条信息:性别。

把文本框示例改为:

(1) 删除labelOccupation 标签和文本框textBoxOccupation。

(2) 添加一个CheckBox、一个GroupBox和两个RadioButton控件,并命名这些新控件,如图15-12所示。注意与前面使用的其他控件不同,GroupBox控件位于Toolbox面板的Containers选项卡上。

GroupBox控件_第1张图片 
图  15-12

(3) RadioButton 和 CheckBox控件的Text属性应与该控件名相同(前3个字符不算)。CheckBox的Text属性应是Sex。

(4) 把checkBoxProgrammer复选框的Checked属性设置为true。注意CheckState属性自动改为Checked。

(5) 把radioButtonMale 或 radioButtonFemale的Checked属性设置为true。注意不能把它们两个同时设置为true。否则,另一个RadioButton的值会自动变为false。

对这个示例的可见部分不再需要更多的修改,但代码要进行许多修改。首先,需要删除所有对已删除文本框的引用。进入代码,完成下述步骤。

(1) 在窗体的构造函数中,删除引用textBoxOccupation 的两行代码,这包括对Validating事件的订阅,以及把Tag属性设置为false的代码行。

(2) 彻底删除textOccupation_Validating()方法。

textBox_TextChanged方法可以用于测试调用的控件是否为 textBoxOccupation文本框。我们现在知道该控件并不是textBoxOccupation文本框(因为已删除了它),所以要修改该方法,即删除else if块,并修改if测试代码,如下所示:

private void textBox_TextChanged(object sender, System.EventArgs e)
{
// Cast the sender object to a Textbox
TextBox tb = (TextBox)sender;
   // Test if the data is valid and set the tag's background
// color accordingly.
if (tb.Text.Length == 0)
{
tb.Tag = false;
tb.BackColor = Color.Red;
}
else
{
tb.Tag = true;
tb.BackColor = SystemColors.Window;
}
   // Call ValidateOK to set the OK button
ValidateOK();
}
在ValidateOK()方法中检查已删除的文本框的值,彻底删除检查代码,则最终代码变成:
private void ValidateOK()
{
// Set the OK button to enabled if all the Tags are true
this.buttonOK.Enabled = ((bool)(this.textBoxAddress.Tag) &&
  (bool)(this.textBoxAge.Tag) &&
  (bool)(this.textBoxName.Tag));
}

这里使用的是复选框,而不是文本框,所以用户不会输入无效的信息,因为用户要么是一个程序员,要么不是。

我们也知道用户要么是男性,要么是女性,因为前面把一个RadioButton的属性设置为true,这样用户就不会选择无效的值。因此,下面只需要修改帮助文本和输出。我们在按钮事件处理程序中完成它:

private void buttonHelp_Click(object sender, System.EventArgs e)
{
// Write a short descrption of each TextBox in the Output TextBox
string output;
output = "Name = Your name\r\n";
output += "Address = Your address\r\n";
output += "Programmer = Check 'Programmer' if you are a programmer\r\n";
output += "Sex = Choose your sex\r\n";
output += "Age = Your age";
// Insert the new text
this.textBoxOutput.Text = output;
}
下面只剩下修改帮助文本了,所以不要对帮助方法感到惊讶。在OK方法中,它显得稍微有趣一点:
private void buttonOK_Click(object sender, System.EventArgs e)
{
// No testing for invalid values are made, as that should
// not be neccessary

string output;
   // Concatenate the text values of the four TextBoxes
output = "Name: " + this.textBoxName.Text + "\r\n";
output += "Address: " + this.textBoxAddress.Text + "\r\n";
output += "Occupation: " + (string)(this.chkProgrammer.Checked ?
"Programmer" : "Not a programmer") + "\r\n";
output += "Sex: " + (string)(this.radioButtonFemale.Checked ? "Female" :
"Male") + "\r\n";
output += "Age: " + this.textBoxAge.Text;
   // Insert the new text
this.textBoxOutput.Text = output;
}

在突出显示的代码中,第一行打印出了用户的职业。考察一下复选框的Checked属性,如果它是true,就写入字符串"Programmer",如果它是false,就填写"Not a programmer"。

第二行代码检查单选按钮radioButtonFemale。如果该控件的Checked属性是true,则该用户是一位女性。如果它是false,则该用户是一位男性。在启动程序时,可以不选中任何一个单选按钮,但因为是在设计期间选择了其中一个单选按钮,所以可以肯定总是会选中其中一个单选按钮

现在运行示例,得到如图15-13所示的结果。

GroupBox控件_第2张图片 
图  15-13

你可能感兴趣的:(c#就你了)