圖形介面程式設計(六) 分組容器和卡片容器(1)
——本節介紹瞭如何使用分組容器(GroupBox)以及一個分組RadioButton的例項
1 分組容器
GroupBox容器使用起來就和一個基本的Panel容器一樣,它不具備佈局管理功能,僅僅是一個可以容納其它控制元件的容器。
GroupBox的主要特點就是:該容器具有一個外觀優雅的邊框,並且可以具備標題文字。所以該容器的主要作用就是:將符合某一類功能特點的控制元件分組,使整個窗體看上去整齊一些。
不要小看了分組,讓整個介面看上去井井有條是一個圖形化介面產品成敗的關鍵!
下圖展示了一個使用者註冊介面,通過GroupBox將為數眾多的控制元件根據功能分組。
GroupBox還有一個重要的功能:設定RadioButton控制元件的組別。
RadioButton控制元件稱為單選按鈕控制元件。這個控制元件具有一個bool型別的Checked屬性,表示被選中和未被選中(通過一個小圓框是否有顏色來區分)。一組RadioButton控制元件同時只有一個可以處於被選中狀態,所以稱為單選按鈕控制元件。.net Framework是這樣來界定RadioButton控制元件的分組的:處於同一個容器內的RadioButton控制元件屬於一組,只有一個控制元件可以處於被選中狀態。所以我們有幾組RadioButton控制元件,就得將它們放入多少個不同的容器中。
任何容器都可以作為分組RadioButton的依據,但介面設計者們更青睞於GroupBox容器,因為它不僅可以起到分組RadioButton的作用,還能進一步說明這一組RadioButton的含義是什麼。
注意:GroupBox容器本身不具備佈局管理功能,所以要想進行相對佈局管理,請將GroupBox放入具備佈局功能的容器中,並且在GroupBox容器內放入某種可以進行佈局管理的容器。
下面我們通過一個簡單的例子來說明GroupBox的使用方法,在設計例子時,我們選擇了RadioButton控制元件作為容器內容:
圖2 介面設計示意圖
可以看到,為了佈局的合理性,我們使用一個3行1列的表格佈局面板(TableLayoutPanel)來佈局整個窗體。在第2、3行放入分組容器(GroupBox),為了讓分組容器內的一系列單選按鈕控制元件合理佈局,在分組容器內又放置了一個流式佈局面板容器(FlowLayoutPanel)。下面我們看實現程式碼:
Program.cs
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- namespace Edu.Study.Graphics.GroupBoxContainer {
- /// <summary>
- /// 主窗體類
- /// </summary>
- class MyForm : Form {
- // 預設字型大小
- privateconstfloat DEFAULT_FONT_SIZE = 40.0F;
- // 表格佈局面板容器
- private TableLayoutPanel tablePane;
- // 表格佈局面板容器第一行內的文字標籤
- private Label textLable;
- // 表格佈局面板容器第二行內的分組容器
- private GroupBox groupBox1;
- // 表格佈局面板容器第三行內的分組容器
- private GroupBox groupBox2;
- // 分組容器1中的流式佈局面板
- private FlowLayoutPanel flowPane1;
- // 分組容器2中的流式佈局面板
- private FlowLayoutPanel flowPane2;
- /// <summary>
- /// 構造器, 初始化控制元件
- /// </summary>
- public MyForm() {
- // 設定窗體標題
- this.Text = "分組容器";
- // 設定窗體尺寸
- this.Size = new Size(800, 600);
- /***** 設定表格佈局管理器佈局 *****/
- this.tablePane = new TableLayoutPanel();
- this.tablePane.Dock = DockStyle.Fill;
- // 表格佈局面板分為3行1列
- this.tablePane.RowCount = 3;
- this.tablePane.ColumnCount = 1;
- // 設定第1行的樣式: 固定高度, 90單位
- this.tablePane.RowStyles.Add(new RowStyle(SizeType.Absolute, 90.0F));
- // 設定2, 3行的樣式,
- for (int i = 1; i < this.tablePane.RowCount; i++) {
- this.tablePane.RowStyles.Add(new RowStyle(SizeType.Percent, 50.0F));
- }
- // 設定第1列的樣式
- this.tablePane.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
- this.Controls.Add(this.tablePane);
- /***** 初始化標籤控制元件 *****/
- this.textLable = new Label();
- this.textLable.Text = "測試文字";
- // 設定文字字型
- this.textLable.Font = new Font(this.Font.FontFamily, DEFAULT_FONT_SIZE);
- // 設定文字居中對齊
- this.textLable.TextAlign = ContentAlignment.MiddleCenter;
- this.textLable.Dock = DockStyle.Fill;
- // 設定標籤具有3D效果邊框
- this.textLable.BorderStyle = BorderStyle.Fixed3D;
- // 控制元件加入表格容器第1行第1列
- this.tablePane.Controls.Add(this.textLable, 0, 0);
- /***** 設定分組容器1 *****/
- this.groupBox1 = new GroupBox();
- this.groupBox1.Dock = DockStyle.Fill;
- // 設定分組容器左上角文字
- this.groupBox1.Text = "選項1";
- // 容器加入表格容器第2行第1列
- this.tablePane.Controls.Add(this.groupBox1, 0, 1);
- /***** 設定流式佈局面板容器1 *****/
- this.flowPane1 = new FlowLayoutPanel();
- this.flowPane1.WrapContents = true;
- this.flowPane1.FlowDirection = FlowDirection.LeftToRight;
- this.flowPane1.Dock = DockStyle.Fill;
- // 容器加入分主容器1內
- this.groupBox1.Controls.Add(this.flowPane1);
- /***** 設定分組容器2 *****/
- this.groupBox2 = new GroupBox();
- this.groupBox2.Dock = DockStyle.Fill;
- this.groupBox2.Text = "選項2";
- // 容器加入表格容器第3行第1列
- this.tablePane.Controls.Add(this.groupBox2, 0, 2);
- /***** 設定流式佈局面板容器1 *****/
- this.flowPane2 = new FlowLayoutPanel();
- this.flowPane2.WrapContents = true;
- this.flowPane2.FlowDirection = FlowDirection.LeftToRight;
- this.flowPane2.Dock = DockStyle.Fill;
- // 容器加入分主容器2內
- this.groupBox2.Controls.Add(this.flowPane2);
- /***** 流式面板容器1中的單選按鈕控制元件展示的Color顏色物件陣列 *****/
- Color[] colors = {
- Color.Black,
- Color.Blue,
- Color.Orange,
- Color.Red,
- Color.Green,
- Color.Gray,
- Color.Pink,