1. 程式人生 > >圖形介面程式設計(六) 分組容器和卡片容器(1)

圖形介面程式設計(六) 分組容器和卡片容器(1)

——本節介紹瞭如何使用分組容器(GroupBox)以及一個分組RadioButton的例項

1 分組容器

GroupBox容器使用起來就和一個基本的Panel容器一樣,它不具備佈局管理功能,僅僅是一個可以容納其它控制元件的容器。

GroupBox的主要特點就是:該容器具有一個外觀優雅的邊框,並且可以具備標題文字。所以該容器的主要作用就是:將符合某一類功能特點的控制元件分組,使整個窗體看上去整齊一些。

不要小看了分組,讓整個介面看上去井井有條是一個圖形化介面產品成敗的關鍵!

下圖展示了一個使用者註冊介面,通過GroupBox將為數眾多的控制元件根據功能分組。

GroupBox應用示意圖

圖1 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

  1. using System;  
  2. using System.Drawing;  
  3. using System.Windows.Forms;  
  4. namespace Edu.Study.Graphics.GroupBoxContainer {  
  5.     /// <summary>
  6.     /// 主窗體類
  7.     /// </summary>
  8.     class MyForm : Form {  
  9.         // 預設字型大小
  10.         privateconstfloat DEFAULT_FONT_SIZE = 40.0F;  
  11.         // 表格佈局面板容器
  12.         private TableLayoutPanel tablePane;  
  13.         // 表格佈局面板容器第一行內的文字標籤
  14.         private Label textLable;  
  15.         // 表格佈局面板容器第二行內的分組容器
  16.         private GroupBox groupBox1;  
  17.         // 表格佈局面板容器第三行內的分組容器
  18.         private GroupBox groupBox2;  
  19.         // 分組容器1中的流式佈局面板
  20.         private FlowLayoutPanel flowPane1;  
  21.         // 分組容器2中的流式佈局面板
  22.         private FlowLayoutPanel flowPane2;  
  23.         /// <summary>
  24.         /// 構造器, 初始化控制元件
  25.         /// </summary>
  26.         public MyForm() {  
  27.             // 設定窗體標題
  28.             this.Text = "分組容器";  
  29.             // 設定窗體尺寸
  30.             this.Size = new Size(800, 600);  
  31.             /***** 設定表格佈局管理器佈局 *****/
  32.             this.tablePane = new TableLayoutPanel();  
  33.             this.tablePane.Dock = DockStyle.Fill;  
  34.             // 表格佈局面板分為3行1列
  35.             this.tablePane.RowCount = 3;  
  36.             this.tablePane.ColumnCount = 1;  
  37.             // 設定第1行的樣式: 固定高度, 90單位
  38.             this.tablePane.RowStyles.Add(new RowStyle(SizeType.Absolute, 90.0F));  
  39.             // 設定2, 3行的樣式, 
  40.             for (int i = 1; i < this.tablePane.RowCount; i++) {  
  41.                 this.tablePane.RowStyles.Add(new RowStyle(SizeType.Percent, 50.0F));  
  42.             }  
  43.             // 設定第1列的樣式
  44.             this.tablePane.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));  
  45.             this.Controls.Add(this.tablePane);  
  46.             /***** 初始化標籤控制元件 *****/
  47.             this.textLable = new Label();  
  48.             this.textLable.Text = "測試文字";  
  49.             // 設定文字字型
  50.             this.textLable.Font = new Font(this.Font.FontFamily, DEFAULT_FONT_SIZE);  
  51.             // 設定文字居中對齊
  52.             this.textLable.TextAlign = ContentAlignment.MiddleCenter;  
  53.             this.textLable.Dock = DockStyle.Fill;  
  54.             // 設定標籤具有3D效果邊框
  55.             this.textLable.BorderStyle = BorderStyle.Fixed3D;  
  56.             // 控制元件加入表格容器第1行第1列
  57.             this.tablePane.Controls.Add(this.textLable, 0, 0);  
  58.             /***** 設定分組容器1 *****/
  59.             this.groupBox1 = new GroupBox();  
  60.             this.groupBox1.Dock = DockStyle.Fill;  
  61.             // 設定分組容器左上角文字
  62.             this.groupBox1.Text = "選項1";  
  63.             // 容器加入表格容器第2行第1列
  64.             this.tablePane.Controls.Add(this.groupBox1, 0, 1);  
  65.             /***** 設定流式佈局面板容器1 *****/
  66.             this.flowPane1 = new FlowLayoutPanel();  
  67.             this.flowPane1.WrapContents = true;  
  68.             this.flowPane1.FlowDirection = FlowDirection.LeftToRight;  
  69.             this.flowPane1.Dock = DockStyle.Fill;  
  70.             // 容器加入分主容器1內
  71.             this.groupBox1.Controls.Add(this.flowPane1);  
  72.             /***** 設定分組容器2 *****/
  73.             this.groupBox2 = new GroupBox();  
  74.             this.groupBox2.Dock = DockStyle.Fill;  
  75.             this.groupBox2.Text = "選項2";  
  76.             // 容器加入表格容器第3行第1列
  77.             this.tablePane.Controls.Add(this.groupBox2, 0, 2);  
  78.             /***** 設定流式佈局面板容器1 *****/
  79.             this.flowPane2 = new FlowLayoutPanel();  
  80.             this.flowPane2.WrapContents = true;  
  81.             this.flowPane2.FlowDirection = FlowDirection.LeftToRight;  
  82.             this.flowPane2.Dock = DockStyle.Fill;  
  83.             // 容器加入分主容器2內
  84.             this.groupBox2.Controls.Add(this.flowPane2);  
  85.             /***** 流式面板容器1中的單選按鈕控制元件展示的Color顏色物件陣列 *****/
  86.             Color[] colors = {  
  87.                 Color.Black,  
  88.                 Color.Blue,  
  89.                 Color.Orange,  
  90.                 Color.Red,  
  91.                 Color.Green,  
  92.                 Color.Gray,  
  93.                 Color.Pink,  
  94.