1.單選按鈕(RadioButton)
同一組中其他單選按鈕不能同時選定
分組形式:panel GoupBox 窗體
方法:
屬性 |
說明 |
Appearance |
RadioButton 控件的顯示與命令按鈕相似 |
Checked |
確定是否已選定控件 |
方法 |
說明 |
Focus |
將輸入焦點移至控件 |
實現的界面

1 private void button1_Click(object sender, EventArgs e) 2 { 3 if (radioButton1.Checked) 4 { 5 MessageBox.Show("第一個"); 6 } 7 else if (radioButton2.Checked) 8 { 9 MessageBox.Show("第二個"); 10 } 11 else if (radioButton3.Checked) 12 { 13 MessageBox.Show("第三個"); 14 } 15 else if (radioButton4.Checked) 16 { 17 MessageBox.Show("第四 個"); 18 } 19 20 }
2.圖片框 pictureBox
功能:用於顯示圖片
屬性
屬性 |
說明 |
Image |
用於指定圖片框顯示的圖像。該圖像可在設計或運行時設置 |
SizeMode |
用於指定圖像的顯示方式。可以指定的各種大小模式包括 AutoSize、CenterImage、Normal 和 StretchImage。默認值為 Normal |
方法 |
說明 |
Show Click |
顯示控件 事件 |

1 public Form1() 2 { 3 InitializeComponent(); 4 showpic(); 5 } 6 public void showpic() 7 { 8 //我的文檔 文件夾下的圖片 9 pictureBox1.Image = Image.FromFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + @"\image.gif"); 10 11 //指定顯示屬性 12 pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 13 } 14 private void pictureBox1_Click(object sender, EventArgs e) 15 { 16 if (pictureBox1.Image != null) 17 { 18 pictureBox1.Image.Dispose(); 19 pictureBox1.Image = null; 20 } 21 else 22 { 23 //上述有法子 24 showpic(); 25 } 26 }
3.選項卡控件(tabControl)
在 Windows 應用程序中,選項卡用於將相關的控件集中在一起,放在一個頁面中
選項卡控件用於顯示多個選項卡,其中每個選項卡均可包含圖片和其他控件
選項卡相當於另一個窗體,可以容納其他控件
基本屬性
屬性 |
說明 |
MultiLine |
指定是否可以顯示多行選項卡。如果可以顯示多行選項卡,該值應為 True,否則為 False。默認值為 False |
SelectedIndex |
當前所選選項卡頁的索引值。該屬性的值為當前所選選項卡頁的基於 0 的索引。默認值為 -1,如果未選定選項卡頁,則為同一值 |
SelectedTab |
當前選定的選項卡頁。如果未選定選項卡頁,則值為 NULL 引用 |
ShowToolTips |
指定在鼠標移至選項卡時,是否應顯示該選項卡的工具提示。 如果對帶有工具提示的選項卡顯示工具提示,該值應為 True,否則為 False 【同時必須設置某頁的ToolTipText內容 】************************(工具提示) |
TabCount |
檢索選項卡控件中選項卡的數目 |
SelectedIndexChanged |
更改 SelectedIndex 屬性值時,將觸發該事件 |
|
|
Alignment |
控制標簽在標簽控件的什么位置顯示。默認的位置為控件的頂部 |
Appearance |
控制標簽的顯示方式。標簽可以顯示為一般的按鈕或帶有平面樣式 |
HotTrack |
如果這個屬性設置為true,則當鼠標指針滑過控件上的標簽時,其外觀就會改變 |
Multiline |
如果這個屬性設置為true,就可以有幾行標簽 |
RowCount |
返回當前顯示的標簽行數 |
SelectedIndex |
返回或設置選中標簽的索引 |
TabPages |
這是控件中的TabPage對象集合。使用這個集合可以添加和刪除TabPage對象 |
TabCount |
返回標簽的總數 |
SelectedTab |
返回或設置選中的標簽。注意這個屬性在TabPages的實例上使用 |
eg:
執行效果

1 private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 label1.Text = "當前操作統計信息為:頁面為第" + this.tabControl1.SelectedIndex.ToString() + "頁,選項卡頁為" + tabControl1.SelectedTab.Text + ",共有頁數" + tabControl1.TabCount.ToString(); 4 }
選項卡 上一頁和下一頁

1 private void button1_Click(object sender, EventArgs e) 2 { 3 tabControl2.TabPages.Add(new TabPage("新建頁")); 4 } 5 6 private void button2_Click(object sender, EventArgs e) 7 { 8 tabControl2.TabPages.RemoveAt(tabControl2.SelectedIndex); 9 } 10 11 private void button3_Click(object sender, EventArgs e) 12 { 13 int i = tabControl2.SelectedIndex; 14 if (i-1 < 0) 15 { 16 MessageBox.Show("已經到頭"); 17 return; 18 } 19 else 20 { 21 tabControl2.SelectedIndex = i - 1; 22 } 23 } 24 25 private void button4_Click(object sender, EventArgs e) 26 { 27 int i = tabControl2.SelectedIndex; 28 if (i + 1 >= tabControl2.TabCount) 29 { 30 MessageBox.Show("已經到頭"); 31 return; 32 } 33 else 34 { 35 tabControl2.SelectedIndex = i + 1; 36 } 37 } 38 39 private void button6_Click(object sender, EventArgs e) 40 { 41 int i = tabControl2.SelectedIndex; 42 if (i + 1 >= tabControl2.TabCount) 43 { 44 MessageBox.Show("已經到頭"); 45 return; 46 } 47 else 48 { 49 TabPage selecttap = tabControl2.SelectedTab; 50 tabControl2.TabPages.Remove(selecttap);//先從集合之中移除 51 tabControl2.TabPages.Insert(i + 1, selecttap);//再添加進去 52 tabControl2.SelectedIndex = i + 1; 53 } 54 } 55 56 private void button5_Click(object sender, EventArgs e) 57 { 58 int i = tabControl2.SelectedIndex; 59 if (i -1 < 0) 60 { 61 MessageBox.Show("已經到頭"); 62 return; 63 } 64 else 65 { 66 TabPage selecttap = tabControl2.SelectedTab; 67 tabControl2.TabPages.Remove(selecttap);//先從集合之中移除 68 tabControl2.TabPages.Insert(i - 1, selecttap);//再添加進去 69 tabControl2.SelectedIndex = i - 1; 70 } 71 }
4進度條控件ProgressBar
用於指示操作的進度、完成的百分比
外觀是排列在水平條中的一定數目的矩形
屬性及其方法
屬性 |
說明 |
Maximum |
進度條控件的最大值。默認值為 100 |
Minimum |
進度條控件的最小值。進度條從最小值開始遞增,直至達到最大值。默認值為 0 |
Step |
PerformStep 方法應據以增加進度條的光標位置的值。 默認值為 10 |
Value |
進度條控件中光標的當前位置。默認值為 0 |
方法 |
說明 |
Increment |
按指定的遞增值移動進度條的光標位置 |
PerformStep |
按 Step 屬性中指定的值移動進度條的光標位置 |
eg

1 private void button1_Click(object sender, EventArgs e) 2 { 3 progressBar1.Maximum = 1000; 4 progressBar1.Minimum = 0; 5 progressBar1.Step = 1; 6 for (int i = 0; i <= 1000; i++) 7 { 8 progressBar1.PerformStep(); 9 } 10 }
進度條和連接數據庫的練習 讀取數據庫庫的條數

1 private void button1_Click(object sender, EventArgs e) 2 { 3 string sqlstring = "Data Source=(local);Initial Catalog=ccut;User ID=sa"; 4 SqlConnection conn = new SqlConnection(sqlstring); 5 string sql="select * from tbl_advice"; 6 SqlCommand cmd = new SqlCommand(sql, conn); 7 SqlDataAdapter adp = new SqlDataAdapter(); 8 adp.SelectCommand = cmd; 9 DataSet ds = new DataSet(); 10 adp.Fill(ds); 11 conn.Dispose(); 12 conn.Close(); 13 conn = null; 14 15 label1.Visible = true; 16 progressBar1.Visible = true; 17 progressBar1.Minimum = 0; 18 progressBar1.Maximum = ds.Tables[0].Rows.Count; 19 progressBar1.BackColor = Color.Red; 20 21 for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 22 { 23 progressBar1.Value++; 24 Application.DoEvents(); 25 this.label1.Text = progressBar1.Value.ToString(); 26 } 27 }
5 .imageList 控件
ImageList 控件包含 ListImage 對象的集合,該集合中的每個對象都可以通過其索引或關鍵字被引用。ImageList 控件不能獨立使用,只是作為一個便於向其它控件提供圖象的資料中心。
語法
ImageList 控件的作用象圖像的儲藏室,同時,它需要第二個控件顯示所儲存的圖像。第二個控件可以是任何能顯示圖像 Picture 對象的控件,也可以是特別設計的、用於綁定 ImageList 控件的 Windows 通用控件之一。這些控件包括ListView、ToolBar、TabStrip、Header、ImageCombo、和 TreeView 控件。為了與這些控件一同使用 ImageList,必須通過一個適當的屬性將特定的 ImageList控件綁定到第二個控件。對於 ListView 控件,必須設置其 Icons 和 SmallIcons 屬性為 ImageList 控件。對於 TreeView、TabStrip、ImageCombo、和 Toolbar 控件,必須設置 ImageList 屬性為 ImageList 控件。 在設計時,可以用“ImageList 控件屬性”對話框的“圖像”選項卡來添加圖象。在運行時,可以用 Add 方法給 ListImages 集合添加圖象。 對於 Windows 通用控件來說,設計時可以用“自定義屬性”對話框來指定一個 ImageList。運行時也可以用 ImageList 屬性指定一個 ImageList 控件,就象下面的例子所述的那樣,它可以設置 TreeView 控件的: TreeView1.ImageList = ImageList1 '指定 ImageList 屬性
基本屬性和方法
屬性 |
說明 |
Images |
該屬性表示圖像列表中包含的圖像的集合******* |
ImageSize |
該屬性表示圖像的大小,默認高度和寬度為 16 x 16,最大大小為 256 x 256(特別注意) |
方法 |
說明 |
Draw |
該方法用於繪制指定圖像 |
實訓 添加ToolBar ---單擊ImageList 對象為剛添加的列表 為了toolBar 添加 5個按鈕(tootlBar 屬性buttons) 並為每個按鈕imageindex 配置ImageList 控件的圖片信息
6 ToolBar 控件
屬性和方法
屬性 |
說明 |
ImageIndex ShowToolTips |
為工具欄按鈕指定的圖像在圖像列表中的索引值 true |
Parent |
指定工具欄按鈕所屬的 ToolBar 控件 |
Style |
工具欄按鈕的樣式,其中包括 DropDownButton(下拉按鈕)、Separator(分隔符) 和 ToggleButton(切換按鈕) |
ToolTipText |
表示工具欄按鈕的工具提示文本 |
ButtonClick 單擊工具欄按鈕觸發的事件
加載imageList 控件圖片

1 private void tbrToolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) 2 { 3 if(e.Button == this.tbrToolBar.Buttons[0]) 4 { 5 MessageBox.Show(“已單擊 “打開”按鈕"); 6 } 7 }
窗體加載
{
ToolBarButton bt1=new ToolBarButton();
toolBar1.Buttons.Add(bt1);
toolBar1.ImageList=imageList1;
toolBar1.ShowToolTips=True;
bt1.ImageIndex=0;
tb1.Text="ccut1";
bt1.ToolTipText="ccut 偉大";
}
7 StatusStrip 出現在window 窗體的底部
一般使用文本和圖片 向用戶顯示程序當前的狀態
允許添加控件有 StatuesLabel ,ProgressBar,DropDownButton,SpliButton
eg.
計時器 顯示當前時間的

1 private void timer1_Tick(object sender, EventArgs e) 2 { this.toolStripStatusLabel3.Text = "系統當前時間:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } 3 在Form的Load事件中 對timer1進行相關設置 4 private void MainForm_Load(object sender, EventArgs e) 5 { 6 this.toolStripStatusLabel3.Text = "系統當前時間:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); this.timer1.Interval=1000; this.timer1.Start(); 7 }
連接數據庫,通統計數據 條數 進度條

1 private void button1_Click(object sender, EventArgs e) 2 { 3 toolStripProgressBar1.Value = 0; 4 string sqlstring = "Data Source=(local);Initial Catalog=zrzx;User ID=sa"; 5 SqlConnection conn = new SqlConnection(sqlstring); 6 string sql = "select * from tbl_advice"; 7 SqlCommand cmd = new SqlCommand(sql, conn); 8 SqlDataAdapter adp = new SqlDataAdapter(); 9 adp.SelectCommand = cmd; 10 DataSet ds = new DataSet(); 11 adp.Fill(ds); 12 conn.Dispose(); 13 conn.Close(); 14 conn = null; 15 16 toolStripProgressBar1.Minimum = 0; 17 toolStripProgressBar1.Maximum = ds.Tables[0].Rows.Count; 18 19 for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 20 { 21 toolStripProgressBar1.Value++; 22 Application.DoEvents(); 23 } 24 25 }
richTextBox1.Text.Length
8.timer 不向用戶提交用戶界面
可在規定時間內執行某個事件
屬性和方法
按照某個周期觸發事件
Timer 控件為開發人員提供了一種在經過指定的時間間隔或到達指定的絕對時間時根據代碼進行響應的方式
Enabled 首先設置 |
Interval時間間隔毫秒數 |
Start() 時鍾啟動 |
Stop() 時鍾停止 |

1 private void button1_Click(object sender, EventArgs e) 2 { 3 timer1.Start(); 4 } 5 6 private void button2_Click(object sender, EventArgs e) 7 { 8 timer1.Stop(); 9 } 10 11 private void timer1_Tick(object sender, EventArgs e) 12 { 13 pictureBox1.Left -= 5; 14 if (pictureBox1.Right < 0) 15 { 16 pictureBox1.Left = Width; 17 } 18 }

1 public partial class Form2 : Form 2 { 3 public Form2() 4 { 5 InitializeComponent(); 6 7 } 8 9 private int compuTime; 10 private void timer1_Tick(object sender, EventArgs e) 11 { 12 13 long curTickValue = Environment.TickCount; 14 long difference = curTickValue - compuTime; 15 long computerHours, computerMinutes, computerSeconds; 16 long applicationHours, applicationMinutes, applicationSeconds; 17 //將毫秒轉換成小時、分鍾和秒 18 computerHours = (curTickValue / (3600 * 999)) % 24; 19 computerHours = (curTickValue / (3600 * 999)) % 24; 20 computerMinutes = (curTickValue / (60 * 999)) % 60; 21 computerSeconds = (curTickValue / 999) % 60; 22 applicationHours = (difference / (3600 * 999)) % 24; 23 applicationMinutes = (difference / (60 * 999)) % 60; 24 applicationSeconds = (difference / 999) % 60; 25 this.label1.Text = String.Format("這台計算機已經開機 {0} 小時, {1} 分鍾 {2} 秒", computerHours.ToString(), computerMinutes.ToString(), computerSeconds.ToString()); 26 this.label2.Text = String.Format("這個程序已經運行了 {0} 小時, {1} 分鍾 {2} 秒", applicationHours.ToString(), applicationMinutes.ToString(), applicationSeconds.ToString()); 27 } 28 29 private void button1_Click(object sender, EventArgs e) 30 { 31 this.Close(); 32 } 33 34 private void Form2_Load(object sender, EventArgs e) 35 { 36 37 compuTime = Environment.TickCount; 38 } 39 40 }

1 ==========第一步:建立時間類time================================= 2 ------------------------------------------------------------------------ 3 using System; 4 using System.Collections.Generic; 5 using System.Text; 6 7 //命名空間,指定為 WorkLayer,表示凡是運行在該層下的類都屬於業務邏輯層面。 8 namespace WorkLayer 9 { 10 class Time 11 { 12 private int hour; 13 private int minute; 14 private int second; 15 16 //構造函數,TIME類將首先執行該函數 17 public Time() 18 { 19 this.hour = 0; 20 this.minute = 0; 21 this.second = 0; 22 } 23 //重載構造函數 24 public Time(int hour, int minute, int second) 25 { 26 this.hour = hour; 27 this.minute = minute; 28 this.second = second; 29 } 30 //從外部將始終參數錄入 31 public void sethour(int hour) 32 { 33 this.hour = hour; 34 } 35 public void setminute(int minute) 36 { 37 this.minute = minute; 38 } 39 public void setsecond(int second) 40 { 41 this.second = second; 42 } 43 //向外部返回信息 44 public int Gethour() 45 { 46 return this.hour; 47 } 48 public int Getminute() 49 { 50 return this.minute; 51 } 52 public int Getsecond() 53 { 54 return this.second; 55 } 56 57 //對系統++運算符進行重新定義;在實例化一個類的時候將由於++運算而觸發; 58 public static Time operator ++(Time time) 59 { 60 time.second++; 61 if (time.second >= 60) 62 { 63 time.minute++; 64 time.second = 0; 65 if (time.minute >= 60) 66 { 67 time.hour++; 68 time.minute = 0; 69 time.second = 0; 70 if (time.hour >= 24) 71 { 72 time.minute = 0; 73 time.second = 0; 74 time.hour = 0; 75 } 76 } 77 } 78 return new Time(time.hour, time.minute, time.second); 79 } 80 } 81 } 82 83 ==================第二步:建立LOAD編碼:============================== 84 using System; 85 using System.Collections.Generic; 86 using System.ComponentModel; 87 using System.Data; 88 using System.Drawing; 89 using System.Text; 90 using System.Windows.Forms; 91 using WorkLayer; 92 93 namespace WindowsApplication1 94 { 95 public partial class Form1 : Form 96 { 97 public Form1() 98 { 99 InitializeComponent(); 100 } 101 102 WorkLayer.Time time; 103 104 private void Form1_Load(object sender, EventArgs e) 105 { 106 DateTime dtime = DateTime.Now;//調用系統當前的時鍾信息 107 int hour = dtime.Hour; 108 int minute = dtime.Minute; 109 int second = dtime.Second; 110 111 time = new Time(hour, minute, second); 112 this.label1.Text = "當前的系統時間是:" + hour.ToString() + ":" + minute.ToString() + ":" + second.ToString(); 113 this.timer1.Start(); 114 } 115 116 private void timer1_Tick(object sender, EventArgs e) 117 { 118 //WorkLayer.Time time=new Time();問題: 為什么不可以放置在這里? 119 time++; 120 this.label2.Text = "時間正在流逝:" + Convert.ToString(time.Gethour()) + ":" + Convert.ToString(time.Getminute()) + ":" + Convert.ToString(time.Getsecond()); 121 } 122 123 124 } 125 }
9 ListView 控件 文件右側 左側為treeview
屬性
Items |
ListView中的具體內容 |
MultiSelect |
允許選擇多個項 |
SelectedItems |
用戶選擇的listview行 |
Sorting |
指定進行排序的方式 |
column |
詳細視圖中顯示的列信息 |
View |
選擇五種視圖中的一種 |
Clear() |
徹度清除視圖,刪除所有的選項和列 |
GetItemAt() |
返回列表視圖中位於x,y的選項 |
Sort() |
BeginUpdate |
開始更新,直到調用EmdUpdate為止。當一次插入多個選項使用這個方法很有用,因為它會禁止視圖閃爍,並可以大大提高速度 |
EndUpdate |
結束更新 |
Column 集合和 Column 對象
ListView 控件的 Columns 屬性表示控件中出現的所有列標題的集合
列標題是 ListView 控件中包含標題文本的一個項
ColumnHeader 對象定義在控件的 View 屬性設置為“Details”值時,作為 ListView 控件的一部分顯示的那些列 (重點)
如果 ListView 控件沒有沒有任何列標題,並且 View 屬性設置為 Details,則 ListView 控件不顯示任何項
當你把column 設置好以后 View別忘了設置 屬性設置為“Details”
設置完Column 集合相當於完成表頭的設計工作(列設計),另外一個是行設計
是Items項和Item 集合
添加每一行
ListView 控件的 Items 屬性表示包含控件中所有項的集合
該屬性返回 ListView.ListViewItemCollection,可以用於 ListView 中添加新項、刪除項或計算可用項數

1 private void Form2_Load(object sender, EventArgs e) 2 { 3 //表頭 添加與刪除 4 ColumnHeader objheader = new ColumnHeader(); 5 objheader.Text = "姓名"; 6 objheader.TextAlign = HorizontalAlignment.Center; 7 objheader.Width = 40; 8 listView1.Columns.Add(objheader); 9 10 11 } 12 private void button1_Click(object sender, EventArgs e) 13 { 14 //快捷的添加語句 15 listView1.Columns.Add("年齡", 40, HorizontalAlignment.Center); 16 listView1.Columns.Add("班級", 40, HorizontalAlignment.Center); 17 18 listView1.Columns.Add("性別", 40, HorizontalAlignment.Center); 19 listView1.Columns.Add("職業", 40, HorizontalAlignment.Center); 20 button1.Enabled = false; 21 } 22 23 private void button2_Click(object sender, EventArgs e) 24 {//刪除 第二列添加的表頭 (刪除指定的) 25 listView1.Columns.Remove(listView1.Columns[1]); 26 //刪除所有表頭字段 27 listView1.Columns.Clear(); 28 } 29 30 添加刪除記錄
如何 隔行換色

1 for (int i = 0; i < this.listViewControl.Items.Count; i++) 2 { 3 if (i % 2 == 0) 4 { 5 this.listViewControl.Items[i].BackColor = Color.Gray; 6 } 7 }
案例:

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 9 namespace WindowsApplication2 10 { 11 public partial class Form001 : Form 12 { 13 public Form001() 14 { 15 InitializeComponent(); 16 listView1.View = View.Details; 17 } 18 19 private void Form001_Load(object sender, EventArgs e) 20 { 21 ColumnHeader Header1 = new ColumnHeader(); 22 Header1.Text = "姓名"; 23 Header1.TextAlign = HorizontalAlignment.Center; 24 Header1.Width = 100; 25 listView1.Columns.Add(Header1); 26 27 } 28 29 private void button2_Click(object sender, EventArgs e) 30 { 31 listView1.Columns.Add("年齡", 100, HorizontalAlignment.Center); 32 listView1.Columns.Add("班級", 40, HorizontalAlignment.Center); 33 34 listView1.Columns.Add("性別", 40, HorizontalAlignment.Center); 35 listView1.Columns.Add("職業", 40, HorizontalAlignment.Center); 36 button2.Enabled = false; 37 } 38 39 private void button1_Click(object sender, EventArgs e) 40 { 41 listView1.Columns.Remove(listView1.Columns[0]); 42 } 43 44 private void button3_Click(object sender, EventArgs e) 45 { 46 listView1.BeginUpdate(); 47 //如果希望使用 ListView.ListViewItemCollection 類的 Add 方法以每次一個的方式添加項, 48 //則可以使用 BeginUpdate 方法防止控件在每次添加項時重新繪制 ListView。在完成將項添加到控件的任務后, 49 //請調用 EndUpdate 方法以使 ListView 能夠重新繪制。這種添加項的方法可以防止將大量項添加到控件時發生閃爍的 ListView 繪制。 50 listView1.Items.Add("row1", "張三", 0); 51 //增加第一個Item,在View.Details模式下,有點像第一列中一個值。或者是二維表的索引值,或者是數據庫的主碼位置。 52 listView1.Items["row1"].SubItems.Add("21"); 53 //增加第一個Item的第一個子項SubItem,在View.Details模式下,有點像第一行中的第二個值 54 listView1.Items["row1"].SubItems.Add("98001"); 55 listView1.Items["row1"].SubItems.Add("男"); 56 listView1.Items["row1"].SubItems.Add("學生"); 57 //以上內容,以此類推。 58 59 listView1.Items.Add("row2", "李四", 1); 60 listView1.Items["row2"].SubItems.Add("22"); 61 listView1.Items["row2"].SubItems.Add("98002"); 62 listView1.Items["row2"].SubItems.Add("女"); 63 listView1.Items["row2"].SubItems.Add("教師"); 64 65 listView1.Items.Add("row3", "王五", 2); 66 listView1.Items["row3"].SubItems.Add("23"); 67 listView1.Items["row3"].SubItems.Add("98003"); 68 listView1.Items["row3"].SubItems.Add("男"); 69 listView1.Items["row3"].SubItems.Add("干部"); 70 71 listView1.Items.Add("row4", "趙六", 3); 72 listView1.Items["row4"].SubItems.Add("24"); 73 listView1.Items["row4"].SubItems.Add("98004"); 74 listView1.Items["row4"].SubItems.Add("女"); 75 listView1.Items["row4"].SubItems.Add("軍人"); 76 77 listView1.EndUpdate(); 78 79 //下面開始添加行顏色變化 80 for (int i = 0; i < listView1.Items.Count; i++) 81 { 82 if (i % 2 == 0) 83 { 84 listView1.Items[i].BackColor = Color.Gray; 85 } 86 } 87 this.listView1.GridLines = true; 88 this.listView1.View = View.Details; 89 //只可以編輯第一列 90 this.listView1.LabelEdit = true; 91 this.listView1.Scrollable = true; 92 this.listView1.HeaderStyle = ColumnHeaderStyle.Clickable; 93 } 94 95 private void button4_Click(object sender, EventArgs e) 96 { 97 this.listView1.Clear(); 98 } 99 100 private void button5_Click(object sender, EventArgs e) 101 { 102 listView1.Items.Clear(); 103 } 104 105 private void listView1_SelectedIndexChanged(object sender, EventArgs e) 106 { 107 foreach (ListViewItem lst in listView1.SelectedItems) 108 { 109 //在這里對lst進行處理,lst代表每一個被選中的ListViewItem 110 MessageBox.Show(lst.Text);//這里示例顯示每一個被選中的項的第一列的文本 111 112 } 113 } 114 } 115 } 116 117 代碼
案例 清除列、全部、顯示某行信息

1 private void Form002_Load(object sender, EventArgs e) 2 { 3 // 創建一個ListView並設置其位置大小形狀. 4 ListView listView1 = new ListView(); 5 listView1.Bounds = new Rectangle(new Point(10, 10), new Size(300, 200)); 6 // 設置該屬性View視圖 7 listView1.View = View.Details; 8 // 允許用戶修改listView中項的內容. 9 listView1.LabelEdit = true; 10 // 允許用戶自行調整項之間的邊距. 11 listView1.AllowColumnReorder = true; 12 // 每個Item前端顯示checkbox. 13 listView1.CheckBoxes = true; 14 // 選中全行. 15 listView1.FullRowSelect = true; 16 // 表格設置 17 listView1.GridLines = true; 18 //排序 listView1.Sorting = SortOrder.Ascending; 19 // 創建三個ListViewItem和九個子item 20 ListViewItem item1 = new ListViewItem("item1", 0); 21 // 設置item的check. 22 item1.Checked = true; 23 item1.SubItems.Add("1"); 24 item1.SubItems.Add("2"); 25 item1.SubItems.Add("3"); 26 ListViewItem item2 = new ListViewItem("item2", 1); 27 item2.SubItems.Add("4"); 28 item2.SubItems.Add("5"); 29 item2.SubItems.Add("6"); 30 ListViewItem item3 = new ListViewItem("item3", 0); 31 item3.Checked = true; 32 item3.SubItems.Add("7"); 33 item3.SubItems.Add("8"); 34 item3.SubItems.Add("9"); 35 // 創建listView控件的列. 36 listView1.Columns.Add("Item Column", -2, HorizontalAlignment.Left); 37 listView1.Columns.Add("Column 2", -2, HorizontalAlignment.Left); 38 listView1.Columns.Add("Column 3", -2, HorizontalAlignment.Left); 39 listView1.Columns.Add("Column 4", -2, HorizontalAlignment.Center); 40 //把創建的項和子項加入listView listView1.Items.AddRange(new ListViewItem[]{item1,item2,item3}); 41 // 添加ListView進入controls集合 42 this.Controls.Add(listView1); 43 44 } 45 46 ----------------------------------------------- 47 private void button4_Click(object sender, EventArgs e) 48 { 49 this.listView1.Clear(); 50 } 51 52 private void button5_Click(object sender, EventArgs e) 53 { 54 listView1.Items.Clear(); 55 } 56 57 private void listView1_SelectedIndexChanged(object sender, EventArgs e) 58 { 59 foreach (ListViewItem lst in listView1.SelectedItems) 60 { 61 //在這里對lst進行處理,lst代表每一個被選中的ListViewItem 62 MessageBox.Show(lst.Text);//這里示例顯示每一個被選中的項的第一列的文本 63 64 } 65 }
從數據庫之中讀取數據,並在listview之中顯示

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Data.OleDb; 6 using System.Drawing; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace WindowsApplication2 11 { 12 public partial class Form002 : Form 13 { 14 15 private static string strConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + Application.StartupPath + "\\student.mdb"; 16 private OleDbConnection conConnection = new OleDbConnection(strConnect); 17 private ListView lv; 18 19 public Form002() 20 { 21 InitializeComponent(); 22 // 初始化Form 23 this.Left = 0; 24 this.Top = 0; 25 this.Text = "在ListView中顯示數據庫內容!"; 26 // 初始化ListView 27 lv = new ListView(); 28 lv.Left = 0; 29 lv.Top = 0; 30 lv.Width = 700; 31 lv.Height = this.ClientRectangle.Height; 32 lv.GridLines = true; 33 //顯示各個記錄的分隔線 34 lv.FullRowSelect = true; 35 //要選擇就是一行 36 lv.View = View.Details; 37 //定義列表顯示的方式 38 lv.Scrollable = true; 39 //需要時候顯示滾動條 40 lv.MultiSelect = false; // 不可以多行選擇 41 lv.HeaderStyle = ColumnHeaderStyle.Nonclickable; 42 // 針對數據庫的字段名稱,建立與之適應顯示表頭 43 lv.Columns.Add("用戶編號", 60, HorizontalAlignment.Right); 44 lv.Columns.Add("姓名", 100, HorizontalAlignment.Left); 45 lv.Columns.Add("電子郵件", 100, HorizontalAlignment.Left); 46 lv.Columns.Add("性別", 100, HorizontalAlignment.Left); 47 lv.Columns.Add("籍貫", 100, HorizontalAlignment.Left); 48 lv.Columns.Add("QQ", 100, HorizontalAlignment.Left); 49 lv.Columns.Add("MSN", 150, HorizontalAlignment.Left); 50 this.Width = 730; 51 lv.Visible = true; 52 OleDbDataReader reader; 53 string strCommand = "SELECT * FROM bbs_user"; 54 this.conConnection.Open();// 打開數據連接 55 OleDbCommand cmd = new OleDbCommand(strCommand, conConnection); 56 reader = cmd.ExecuteReader();//獲得數據集 57 // 不斷往列表中添加數據記錄 58 while (reader.Read()) 59 { 60 ListViewItem li = new ListViewItem(); 61 li.SubItems.Clear(); 62 li.SubItems[0].Text = reader["user_id"].ToString(); 63 li.SubItems.Add(reader["user_name"].ToString()); 64 li.SubItems.Add(reader["user_E_mail"].ToString()); 65 li.SubItems.Add(reader["user_comefrom"].ToString()); 66 li.SubItems.Add(reader["user_sex"].ToString()); 67 li.SubItems.Add(reader["user_qq"].ToString()); 68 li.SubItems.Add(reader["user_msn"].ToString()); 69 lv.Items.Add(li); 70 } 71 reader.Close(); // 關閉數據集 72 // 在Form中添加此列表 73 this.Controls.Add(lv); 74 // 關閉Form的時候,同時也關閉數據連接 75 this.conConnection.Close(); 76 } 77 78 } 79 }

1 如果要你在程序中顯示數據庫中的數據記錄,你首先想用的顯示工具肯定是DataGrid。當然用DataGrid顯示數據記錄是一種既常用又簡單的方法。但是在程序控制方面,它卻無法那么隨心所欲。本文就是介紹另外一種顯示數據記錄的方法--用ListView來顯示數據記錄,由於他是手動加入記錄,雖然在程序設計中稍微煩瑣了些,但對於那些在特殊的顯示要求,卻往往能夠滿足要求。 2 在.Net FrameWork SDK中定義了許多組件,Visual C#就是通過獲得這些組件的實例來豐富自己的界面的。列表(ListView)是程序設計中一個常用的組件,由於其自身的特點,往往被使用顯示比較龐大的數據信息。本文就是利用他的這個特點來看看它如何來顯示數據記錄。 3 一. 程序設計和運行的環境 4 (1).微軟視窗2000專業版本 5 (2)..Net FrameWork SDK Beta 2 6 (3).Microsoft Data Acess Component 2.6 (MDAC2.6) 7 二. 程序設計的具體思路 8 (1).首先要建立數據連接,打開數據集 9 (2).對列表進行初始化,並使得列表的顯示條件符合數據記錄的條件 10 (3).對數據集中的數據記錄進行遍歷,在遍歷中添加記錄到列表中 11 (4).關閉數據集,關閉數據連接 12 三. 具體的實現步驟 13 (1).首先要建立數據連接,打開數據集 14 對於如何建立數據連接和獲得數據集的內容可以參考本站的一篇文章--《在Visual C#中訪問不同的數據庫》,在此文中對此類問題有比較詳細的介紹,本文就不多敘述,具體實現語句如下: 15 // 定義數據連接的字符串,程序中使用的是Acess 2000數據庫 16 17 private static string strConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " +Application.StartupPath + "\\MY.MDB" ;private OleDbConnection conConnection = new OleDbConnection ( strConnect ) ; 18 19 OleDbDataReader reader ;// 獲得Person里面的所以數據記錄 20 21 string strCommand = "SELECT * FROM Persons" ; 22 23 this.conConnection.Open ( ) ;// 打開數據連接 24 25 OleDbCommand cmd = new OleDbCommand ( strCommand , conConnection ) ; 26 27 reader = cmd.ExecuteReader ( ) ; //獲得數據集 28 (2).對列表進行初始化,並使得列表的顯示條件符合數據記錄的條件。需要說明的是在下面源代碼中,lv是在Class中定義的一個ListView的一個實例 29 30 初始化ListViewlv = new ListView ( ) ; 31 32 lv.Left = 0 ; 33 34 lv.Top = 0 ;lv.Width = 700 ; 35 36 lv.Height = this.ClientRectangle.Height ; 37 38 lv.GridLines = true ;//顯示各個記錄的分隔線 39 40 lv.FullRowSelect = true ; //要選擇就是一行 41 42 lv.View = View.Details ;//定義列表顯示的方式 43 44 lv.Scrollable = true ;//需要時候顯示滾動條 45 46 lv.MultiSelect = false ;// 不可以多行選擇 47 48 lv.HeaderStyle = ColumnHeaderStyle.Nonclickable ;// 針對數據庫的字段名稱,建立與之適應顯示表頭 49 50 lv.Columns.Add ( "姓名" , 60 , HorizontalAlignment.Right ) ; 51 52 lv.Columns.Add ( "住宅電話" , 100 , HorizontalAlignment.Left ) ; 53 54 lv.Columns.Add ( "辦公電話" , 100 , HorizontalAlignment.Left ) ; 55 56 lv.Columns.Add ( "移動電話" , 100 , HorizontalAlignment.Left ) ; 57 58 lv.Columns.Add ( "居住地點" , 100 , HorizontalAlignment.Left ) ; 59 60 lv.Columns.Add ( "工作單位" , 100 , HorizontalAlignment.Left ) ; 61 62 lv.Columns.Add ( "電子郵件" , 100 , HorizontalAlignment.Left ) ; 63 64 lv.Visible = true ; 65 66 (3).對數據集中的數據記錄進行遍歷,在遍歷中添加記錄到列表中。 67 可以利用數據集中的Read ( )方法,來實現對數據記錄的遍歷,Read ( )方法是首先指向首數據記錄,並判斷從此記錄是否為尾記錄,如果不是則返回false,如果是則返回true。並且如果不是尾記錄則自動把數據指針移到下一條記錄上,然后在判斷此記錄是否是尾記錄,如此循環,直至到尾記錄為止。根據此可設計以下代碼: 68 while ( reader.Read ( ) ) 69 70 {ListViewItem li = new ListViewItem ( ) ; 71 72 li.SubItems.Clear ( ) ; 73 74 li.SubItems[0].Text = reader["name"].ToString ( ) ; 75 76 li.SubItems.Add ( reader["HomePhone"].ToString ( ) ) ; 77 78 li.SubItems.Add ( reader["WorkPhone"].ToString ( ) ) ; 79 80 li.SubItems.Add ( reader["MobilePhone"].ToString ( ) ) ; 81 82 li.SubItems.Add ( reader["City"].ToString ( ) ) ; 83 84 li.SubItems.Add ( reader["Address"].ToString ( ) ) ; 85 86 li.SubItems.Add ( reader["Email"].ToString ( ) ) ; 87 88 lv.Items.Add ( li ) ;} 89 90 (4). 關閉數據集,關閉數據連接。 91 關閉數據集和關閉數據連接是很容易的,只要調用這二個對象的Close()方法即可,也只要調用在程序中具體如下: 92 reader.Close ( ) ;//關閉數據集 93 94 this.conConnection.Close ( ) ; // 關閉數據連接

1 // 當點擊打開文件時候觸發該事件 2 private void filecontrol_Click(object sender, EventArgs e) 3 { 4 this.Text = "我的播放器";//確定窗體左上角文本信息 5 OpenFileDialog open = new OpenFileDialog();//創建一個打開的對話框 6 open.AddExtension = true;//設置是否自動在文件中添加擴展名 7 open.CheckFileExists = true;//檢查文件是否存在 8 open.Filter = "多媒體文件(*.AVI)|*.avi|多媒體文件(*.wmv)|*.wmv|所有文件(*.*)|*.*";//設置將打開文件的類型 9 if (open.ShowDialog() == DialogResult.OK) 10 { 11 this.axWindowsMediaPlayer1.URL = open.FileName;//開始播放 12 this.Text += "----當前播放:" + this.axWindowsMediaPlayer1.URL.ToString(); 13 } 14 }
10 Treeview控件
節點形式顯示 顯示文本和數據
TreeView 控件的 Nodes 屬性表示為 TreeView 控件指定的樹節點集
樹節點集中的每個樹節點對象可包括它本身的樹節點集
樹節點集中 Add()、Remove() 和 RemoveAt() 方法使開發人員可添加和移動集中的單個樹節點
注意:如果刪除一個節點,必須保證其無刪除的節點沒有父節點
屬性和方法 事件:
Nodes TreeView 中根節點具體內容集合
ShowLines 是否顯示父子節點之間的連接線
StateImageList 樹形視圖用以表示自定義狀態的ImageList 控件
AfterCheck 選中或取消屬性節點時發生
AfterCollapse 折疊節點時發生
AfterExpand 展開節點時發生
AfterSelect 更改選定內容后發生
BeforeCheck 選中或取消樹節點復選框發生
BeforeCollapse 折疊節點前發生
BeforeExpand 展開節點前發生
BeforeSelect 更改選定內容前發生
eg 演示:
代碼:

1 //添加一個節點,這個結點是根節點。 2 TreeNode node = new TreeNode("main"); 3 treeView1.Nodes.Add(node); 4 5 TreeNode node1 = new TreeNode(); 6 node1.Text = "first"; 7 TreeNode node11 = new TreeNode(); 8 node11.Text = "third"; 9 TreeNode node2 = new TreeNode(); 10 node2.Text = "seconds"; 11 12 node.Nodes.Add(node1);//node下的兩個子節點。 13 node.Nodes.Add(node2); 14 node1.Nodes.Add(node11);//在node1下面在添加一個結點。 15 16 //另一個根節點 17 TreeNode t = new TreeNode("basil");//作為根節點。 18 treeView1.Nodes.Add(t); 19 TreeNode t1 = new TreeNode("basilone"); 20 t.Nodes.Add(t1); 21 TreeNode t2 = new TreeNode("basiltwo"); 22 t.Nodes.Add(t2);

1 //刪除選中的節點 2 treeView1.Nodes.Remove(treeView1.SelectedNode); 3 4 //點擊這個按鈕的時候,可以修改選中項 5 //注意:在使用這個屬性的時候,必須設置treeView1.LabelEdit =true,否則會提示錯誤。 6 treeView1.SelectedNode.BeginEdit(); 7 //展開所有子節點 8 treeView1.SelectedNode = treeView1.Nodes[0]; 9 treeView1.SelectedNode.ExpandAll(); 10 //折疊 11 treeView1.SelectedNode = treeView1.Nodes[0]; 12 treeView1.SelectedNode.Collapse();
實例:

1 public Form3() 2 { 3 InitializeComponent(); 4 } 5 6 private void Form3_Load(object sender, EventArgs e) 7 { 8 treeView1.Nodes.Clear(); 9 TreeNode tem = new TreeNode("根節點"); 10 treeView1.Nodes.Add(tem); 11 12 } 13 /// <summary> 14 /// 添加子節點方法代碼 15 /// </summary> 16 private void AddChildNode() 17 { 18 //首先判斷是否選定組件中的位置 19 if (treeView1.SelectedNode == null) 20 { 21 MessageBox.Show("請選擇一個節點", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 22 } 23 else 24 { 25 if (textBox1.Text != "") 26 { 27 //創建一個節點對象,並初始化 28 TreeNode tmp; 29 tmp = new TreeNode(textBox1.Text); 30 //在TreeView組件中加入子節點 31 treeView1.SelectedNode.Nodes.Add(tmp); 32 treeView1.SelectedNode = tmp; 33 treeView1.ExpandAll(); 34 } 35 else 36 { 37 MessageBox.Show("TextBox組件必須填入節點名稱!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 38 return; 39 } 40 } 41 } 42 /// <summary> 43 /// 添加兄弟節點方法代碼 44 /// </summary> 45 private void AddParent() 46 { 47 try 48 { 49 //首先判斷是否選定組件中節點的位置 50 if (treeView1.SelectedNode == null) 51 { 52 MessageBox.Show("請選擇一個節點", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 53 } 54 else 55 { 56 if (textBox1.Text != "") 57 { 58 //創建一個節點對象,並初始化 59 TreeNode tmp; 60 tmp = new TreeNode(textBox1.Text); 61 //在TreeView組件中加入兄弟節點 62 treeView1.SelectedNode.Parent.Nodes.Add(tmp); 63 treeView1.ExpandAll(); 64 } 65 else 66 { 67 MessageBox.Show("TextBox組件必須填入節點名稱!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 68 return; 69 } 70 } 71 } 72 catch 73 { 74 //MessageBox.Show("建立節點時候意外錯誤!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 75 TreeNode tem = new TreeNode("根節點"); 76 treeView1.Nodes.Add(tem); 77 } 78 //TreeNode tnode = new TreeNode(textBox1.Text); 79 } 80 81 private void treeView1_MouseDown(object sender, MouseEventArgs e) 82 { 83 if (e.Button == MouseButtons.Right) 84 contextMenuStrip1.Show(this, new Point(e.X, e.Y)); 85 86 } 87 88 private void button1_Click(object sender, EventArgs e) 89 { 90 treeView1.SelectedNode.Expand(); 91 } 92 93 private void button2_Click(object sender, EventArgs e) 94 { 95 //定位根節點 96 treeView1.SelectedNode = treeView1.Nodes[0]; 97 //展開組件中的所有節點 98 treeView1.SelectedNode.ExpandAll(); 99 100 } 101 102 private void button3_Click(object sender, EventArgs e) 103 { 104 //定位根節點 105 treeView1.SelectedNode = treeView1.Nodes[0]; 106 //折疊組件中所有節點 107 treeView1.SelectedNode.Collapse(); 108 109 } 110 111 private void ToolStripMenuItem1_Click(object sender, EventArgs e) 112 { 113 AddChildNode(); 114 } 115 116 private void ToolStripMenuItem2_Click(object sender, EventArgs e) 117 { 118 AddParent(); 119 } 120 121 private void ToolStripMenuItem3_Click(object sender, EventArgs e) 122 { 123 //判斷選定的節點是否存在下一級節點 124 if (treeView1.SelectedNode.Nodes.Count == 0) 125 //刪除節點 126 treeView1.SelectedNode.Remove(); 127 else 128 MessageBox.Show("請先刪除此節點中的子節點!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 129 130 }
11 CheckedListBox 可選列表框控件
類似於ListBox和CheckBox結合體
屬性和方法 事件
Items |
描述控件對象中的所有項。 |
MutiColumn |
決定是否可以以多列的形式顯示各項。在控件對象的指定高度內無法完全顯示所有項時可以分為多列,這種情況下若MutiColumn屬性值為false,則會在控件對象內出現滾動條。 |
ColumnWidth |
當控件對象支持多列時,指定各列所占的寬度 |
CheckOnClick |
決定是否在第一次單擊某復選框時即改變其狀態 |
SelectionMode |
指示復選框列表控件的可選擇性。該屬性只有兩個可用的值None和One,其中None值表示復選框列表中的所有選項都處於不可選狀態;One值則表示復選框列表中的所有選項均可選。 |
Sorted |
表示控件對象中的各項是否按字母的順序排序顯示 |
CheckedItems |
表示控件對象中選中項的集合,該屬性是只讀的 |
CheckedIndices |
表示控件對象中選中索引的集合 |
SetItemChecked |
設置列表中的某個復選框的選中狀態。 |
SetSelected |
設置列表中的某個復選框的待選狀態。 |
案例:
代碼:

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 9 namespace WindowsApplication2 10 { 11 public partial class Form004 : Form 12 { 13 public Form004() 14 { 15 InitializeComponent(); 16 } 17 18 private void Form004_Load(object sender, EventArgs e) 19 { 20 checkedListBox1.Items.Add("星期一"); 21 checkedListBox1.Items.Add("星期二"); 22 checkedListBox1.Items.Add("星期三"); 23 checkedListBox1.Items.Add("星期四"); 24 checkedListBox1.Items.Add("星期五"); 25 checkedListBox1.Items.Add("星期六"); 26 checkedListBox1.Items.Add("星期日"); 27 } 28 29 /// <summary> 30 /// 移至右側部分項 31 /// </summary> 32 /// <param name="sender"></param> 33 /// <param name="e"></param> 34 private void button1_Click(object sender, EventArgs e) 35 { 36 foreach (object o in checkedListBox1.CheckedItems) 37 { 38 checkedListBox2.Items.Add(o); 39 } 40 //會發現沒有達到預想目標 41 // for (int i = 0; i < checkedListBox1.Items.Count; i++) 42 for (int i = checkedListBox1.Items.Count; i >0; i--) 43 { 44 if (checkedListBox1.CheckedItems.Contains(checkedListBox1.Items[i])) 45 { 46 checkedListBox3.Items.Add(checkedListBox1.Items[i].ToString()+"被移至右側"); 47 checkedListBox1.Items.Remove(checkedListBox1.Items[i]); 48 } 49 } 50 } 51 /// <summary> 52 /// 左側全部移到右側 53 /// </summary> 54 /// <param name="sender"></param> 55 /// <param name="e"></param> 56 private void button2_Click(object sender, EventArgs e) 57 { 58 foreach (object o in checkedListBox1.Items) 59 { 60 checkedListBox2.Items.Add(o); 61 } 62 checkedListBox1.Items.Clear(); 63 checkedListBox3.Items.Add("左側全部移到右側"); 64 } 65 /// <summary> 66 /// 右側移到左側 67 /// </summary> 68 /// <param name="sender"></param> 69 /// <param name="e"></param> 70 private void button3_Click(object sender, EventArgs e) 71 { 72 foreach (object o in checkedListBox2.CheckedItems) 73 { 74 checkedListBox1.Items.Add(o); 75 } 76 for (int i = 0; i < checkedListBox2.Items.Count; i++) 77 { 78 if (checkedListBox2.CheckedItems.Contains(checkedListBox2.Items[i])) 79 { 80 checkedListBox3.Items.Add(checkedListBox1.Items[i].ToString() + "被移至左側"); 81 checkedListBox2.Items.Remove(checkedListBox2.Items[i]); 82 } 83 } 84 } 85 86 private void button4_Click(object sender, EventArgs e) 87 { 88 foreach (object o in checkedListBox2.Items) 89 { 90 checkedListBox1.Items.Add(o); 91 } 92 checkedListBox2.Items.Clear(); 93 checkedListBox3.Items.Add("右側全部移到左側"); 94 } 95 } 96 }

1 public partial class Form4 : Form 2 { 3 //建立數組,用以存儲星期數據 4 private string[] weekleft; 5 private string[] weekright; 6 //左右鍵點擊次數 7 int LeftClicknum = 0; 8 int RightClicknum = 0; 9 public Form4() 10 { 11 InitializeComponent(); 12 } 13 /// <summary> 14 /// 初始化事件在左側的checkedListBox加載星期信息 15 /// </summary> 16 private void Form4_Load(object sender, EventArgs e) 17 { 18 checkedListBox1.Items.Add("星期一"); 19 checkedListBox1.Items.Add("星期二"); 20 checkedListBox1.Items.Add("星期三"); 21 checkedListBox1.Items.Add("星期四"); 22 checkedListBox1.Items.Add("星期五"); 23 checkedListBox1.Items.Add("星期六"); 24 checkedListBox1.Items.Add("星期日"); 25 //注意:下面內容是初始化時候,首先填充滿左側的數組weekleft[] 26 weekleft = new string[checkedListBox1.Items.Count]; 27 for (int i = 0; i < weekleft.Length; i++) 28 { 29 weekleft[i] = checkedListBox1.Items[i].ToString(); 30 } 31 //通過設置checkedListBox的CheckOnClick為true,可以使得單選一次既可以勾選一行信息。 32 checkedListBox1.CheckOnClick = true; 33 checkedListBox2.CheckOnClick = true; 34 checkedListBox3.CheckOnClick = true; 35 } 36 /// <summary> 37 /// 移至右側部分項 38 /// </summary> 39 private void button1_Click(object sender, EventArgs e) 40 { 41 //建立兩個列表,分別保存左右的勾選信息 42 List<string> ListLeft = new List<string>(); 43 List<string> ListRight = new List<string>(); 44 //通過for循環,遍歷左側行信息 45 for (int i = 0; i < checkedListBox1.Items.Count; i++) 46 { 47 //如果左側第i行信息包含在勾選的集合之內 48 if (checkedListBox1.CheckedItems.Contains(checkedListBox1.Items[i])) 49 { 50 Array.Clear(weekleft, i, 1); 51 //表示從左側weekleft數組中清除第i個值,向后1位。目的是將已經填充滿的左側數組信息開始減少。 52 ListRight.Add(checkedListBox1.Items[i].ToString()); 53 //將移除的項目添加到臨時列表ListRight,代表右側列表。 54 } 55 } 56 //判斷左側是否是第一次點擊; 57 if (LeftClicknum == 0) 58 { 59 //如果是則將右側列表轉換成為數組后賦值給右側數組weekright[] 60 weekright = ListRight.ToArray(); 61 //左側點擊次數累加1 62 LeftClicknum++; 63 } 64 else 65 { 66 //如果不是第一次點擊,根據右側checkedListBox內已經填充的個數進行循環 67 for (int i = 0; i < checkedListBox2.Items.Count; i++) 68 { 69 ListRight.Add(checkedListBox2.Items[i].ToString()); 70 //先把右側已經添加的行信息注入到右側列表ListRight內 71 } 72 weekright = ListRight.ToArray(); 73 //然后將右側列表ListRight轉換成為數組后賦值給右側數組weekright[] 74 } 75 //建立列表緩沖保存 76 foreach (string s in weekleft) 77 { 78 if (!string.IsNullOrEmpty(s)) ListLeft.Add(s);//遍歷左側數組,添加左側列表 79 } 80 weekleft = ListLeft.ToArray(); 81 //將左側列表轉化成為數組后再復制給左側數組。 82 //注意:由於C#中沒有動態數組的概念,因此采取這樣的方式改變數組的長度和內容。 83 checkedListBox1.Items.Clear(); 84 checkedListBox2.Items.Clear(); 85 //將左右兩側的checkedListBox全部清空,准備將數組信息開始填充 86 for (int i = 0; i < weekleft.Length; i++) 87 { 88 checkedListBox1.Items.Add(weekleft[i].ToString()); 89 } 90 for (int j = 0; j < weekright.Length; j++) 91 { 92 checkedListBox2.Items.Add(weekright[j].ToString()); 93 } 94 }
利用了
解決信息移動的問題,最直接的想法是建立中間態的緩沖區,將左側勾選的數據先行在該緩沖區中緩存,然后再刪除左側勾選信息,並將緩沖區的數據防止到左側列表中即可完成任務。當然,這個緩沖區可以是列表,數組,隊列等概念。此次我們通過數組+列表的方式實現上述的基本思想。首先建立兩個數組和兩個列表,通過確定勾選內容將最終未勾選的左側數據賦值給左側數組,已勾選的內容賦值給右側數組,並最終將數組中真實的信息再次顯示在左右列表內的辦法實現基本算法。
12.numericUpDown微調按鈕控件
看起來像文本框和一組箭頭的組合,用戶可以通過單擊箭頭來調整具體的數值。用戶可以通過單擊向上和向下的箭頭按鈕,增大或減小參數值。
屬性和方法
屬性
|
說明
|
Increment
|
遞增量,默認為1。
|
Maximum
|
最大值,默認100。
|
Minmum
|
最小值,默認0.
|
Updownalign
|
設置微調按鈕的位置,Left或者Right
|
InterceptArrowKeys
|
是否接受上下箭頭的控制
|
numericUpDown控件控制圖片的移動
從工具箱之中拖放一個numericUpDown控件,一個Button控件,一個pictureBox控件和一個Timer控件
設置Timer控件的Enabled屬性為True,分別雙擊Button控件和Timer控件

1 /// 時間控件的Tick事件觸發 2 /// </summary> 3 private void timer1_Tick(object sender, EventArgs e) 4 { 5 pictureBox1.Left -= 5; 6 if (pictureBox1.Right < 0) 7 { 8 pictureBox1.Left = this.Width; 9 } 10 } 11 /// <summary> 12 /// 單擊“變更頻率”時候觸發 13 /// </summary> 14 private void button1_Click(object sender, EventArgs e) 15 { 16 timer1.Interval = Convert.ToInt32(numericUpDown1.Value); 17 //獲取微調按鈕信息值 18 timer1.Start(); 19 }
13.monthCalendar日歷控件
Windows 窗體 MonthCalendar 控件為用戶查看和設置日期信息提供了一個直觀的圖形界面。該控件以網格形式顯示日歷,網格包含月份的編號日期,這些日期排列在周一到周日下的七個列中,並且突出顯示選定的日期范圍。可以單擊月份標題任何一側的箭頭按鈕來選擇不同的月份。與類似的 DateTimePicker 控件不同,您可以使用該控件選擇多個日期,但其選擇范圍僅限一周(按住shift鍵用鼠標點擊范圍)
屬性和方法
屬性
|
說明
|
Backcolor
|
月份中顯示背景色。
|
SelectionRange
|
在月歷中顯示的起始時間范圍,Begin為開始,end為截至。
|
Minmum
|
最小值,默認0.
|
Showtody,
showtodaycircle,
Showweeknumbers
|
是否顯示今天日期
是否在今天日期上加紅圈
是否左側顯示周數(1-52周)
|
Titlebackcolor
TitleForcolor
Trailingcolor
|
日歷標題背景色。
日歷標題前景色
上下月顏色
|
從工具箱之中拖放一個monthCalendar控件,三個ComBoBox控件和若干Label標簽,進行布局。

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 9 namespace WindowsApplication2 10 { 11 public partial class Form007 : Form 12 { 13 public Form007() 14 { 15 InitializeComponent(); 16 } 17 /// <summary> 18 /// 初始化時候,首先設置label標簽的內容 19 /// </summary> 20 private void Form007_Load(object sender, EventArgs e) 21 { 22 label1.Text = "今天是:" + monthCalendar1.TodayDate.ToString(); 23 label2.Text = ""; 24 label3.Text = ""; 25 label7.Text = ""; 26 label8.Text = ""; 27 label9.Text = ""; 28 } 29 /// <summary> 30 /// 一旦monthCalendar控件的時間發生變化,則引發label標簽的內容改變。 31 /// </summary> 32 private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) 33 { 34 label2.Text = "起始日期:" + monthCalendar1.SelectionStart.ToString(); 35 //學習monthCalendar屬性SelectionStart,表示獲取起始日期 36 label3.Text = "結束日期:" + monthCalendar1.SelectionEnd.ToString(); 37 //學習monthCalendar屬性SelectionEnd,表示獲取結束日期 38 label7.Text = "加3月日期:" + monthCalendar1.SelectionStart.AddMonths(3).ToString(); 39 //學習monthCalendar方法AddMonths,表示增加起始日期的月份 40 label8.Text = "加3天日期:" + monthCalendar1.SelectionStart.AddDays(3).ToString(); 41 //學習monthCalendar方法AddDays,表示增加起始日期的天數 42 label9.Text = "加3年日期:" + monthCalendar1.SelectionStart.AddYears(3).ToString(); 43 //學習monthCalendar方法AddYears,表示增加起始日期的年份 44 } 45 /// <summary> 46 /// 當改變背景色時候出發代碼,本案例熟悉monthCalendar控件的TitleBackColor屬性 47 /// </summary> 48 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 49 { 50 if (comboBox1.SelectedIndex >= 0) 51 { 52 int i = comboBox1.SelectedIndex; 53 switch (i) 54 { 55 case 0: 56 monthCalendar1.TitleBackColor = System.Drawing.Color.Red; 57 break; 58 case 1: 59 monthCalendar1.TitleBackColor = System.Drawing.Color.Yellow; 60 break; 61 case 2: 62 monthCalendar1.TitleBackColor = System.Drawing.Color.Blue; 63 break; 64 case 3: 65 monthCalendar1.TitleBackColor = System.Drawing.Color.Green; 66 break; 67 } 68 } 69 } 70 /// <summary> 71 /// 當改變標題色時候出發代碼,本案例熟悉monthCalendar控件的TrailingForeColor屬性 72 /// </summary> 73 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 74 { 75 if (comboBox2.SelectedIndex >= 0) 76 { 77 int i = comboBox2.SelectedIndex; 78 switch (i) 79 { 80 case 0: 81 monthCalendar1.TrailingForeColor = System.Drawing.Color.Red; 82 break; 83 case 1: 84 monthCalendar1.TrailingForeColor = System.Drawing.Color.Yellow; 85 break; 86 case 2: 87 monthCalendar1.TrailingForeColor = System.Drawing.Color.Blue; 88 break; 89 case 3: 90 monthCalendar1.TrailingForeColor = System.Drawing.Color.Green; 91 break; 92 } 93 } 94 } 95 /// <summary> 96 /// 當改變前景色時候出發代碼,本案例熟悉monthCalendar控件的TitleForeColo屬性 97 /// </summary> 98 private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) 99 { 100 if (comboBox3.SelectedIndex >= 0) 101 { 102 int i = comboBox3.SelectedIndex; 103 switch (i) 104 { 105 case 0: 106 monthCalendar1.TitleForeColor = System.Drawing.Color.Red; 107 break; 108 case 1: 109 monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow; 110 break; 111 case 2: 112 monthCalendar1.TitleForeColor = System.Drawing.Color.Blue; 113 break; 114 case 3: 115 monthCalendar1.TitleForeColor = System.Drawing.Color.Green; 116 break; 117 } 118 } 119 } 120 } 121 }
2.14 DataTimePicker控件
希望應用程序能夠使用戶可以選擇日期和時間,並以指定的格式顯示該日期和時間,可以使用 DataTimePicker控件。DataTimePicker控件用於選擇日期和時間,與Monthcalendar控件不同,DataTimePicker控件只能夠選擇一個時間段
從工具箱之中拖放兩個DataTimePicker控件,若干Label標簽
屬性和方法
屬性
|
說明
|
showcheckbox
|
是否在控件中顯示復選框,當復選框為選中時候,表示未選擇任何值。
|
checked
|
當showcheckbox 為TRUE時候,確定是否選擇復選框。
|
showupdown
|
改為數字顯示框,不再顯示月歷表。
|
value
|
當前的日期(年月日時分秒)
|

1 /// <summary> 2 /// 初始化事件時候,分別顯示選擇日期的日期和周以及時間差信息 3 /// </summary> 4 private void Form008_Load(object sender, EventArgs e) 5 { 6 label3.Text = "選擇日期是本年度第" + dateTimePicker1.Value.DayOfYear.ToString() + "天"; 7 //學習如何從dateTimePicker控件內獲取選擇天為一年的第幾天。 8 label4.Text = "選擇日期是本周" + dateTimePicker1.Value.DayOfWeek.ToString(); 9 //學習如何從dateTimePicker控件內獲取選擇天為一年的第幾周。 10 label5.Text = "兩個日期之差是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天"; 11 //求兩個選擇的日期之差 12 } 13 /// <summary> 14 /// 當dateTimePicker1的時間發生變化時候,執行下面代碼 15 /// </summary> 16 private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 17 { 18 label5.Text = "兩個日期之差是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天"; //求兩個選擇的日期之差 19 } 20 /// <summary> 21 /// 當dateTimePicker2的時間發生變化時候,執行下面代碼 22 /// </summary> 23 private void dateTimePicker2_ValueChanged(object sender, EventArgs e) 24 { 25 label5.Text = "兩個日期之差是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天"; //求兩個選擇的日期之差 26 }
代碼排除

1 /*選擇的日期都是同一年的不同兩天,則通過求某天是一年的第幾天,然后求差的方式是可以爭取計算出兩個日期之差的。但是如果第一天日期為2009年1月1日,另一天為2008年12月31日的話,我們知道其日期差為1天,但是通過我們的程序計算就會得出365天的錯誤值*/ 2 private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 3 { 4 DateTime d1 = dateTimePicker1.Value; 5 DateTime d2 = dateTimePicker2.Value; 6 TimeSpan d3 = d2.Subtract(d1); 7 //注意:TimeSpan類型表示一個時間間隔類型,Subtract方法可以求出兩個事件准確的日期差。 8 label5.Text = "兩個日期之差是:" + Convert.ToString(d3.TotalDays) + "天"; 9 } 10 private void dateTimePicker2_ValueChanged(object sender, EventArgs e) 11 { 12 DateTime d1 = dateTimePicker1.Value; 13 DateTime d2 = dateTimePicker2.Value; 14 TimeSpan d3 = d2.Subtract(d1); 15 //注意:TimeSpan類型表示一個時間間隔類型,Subtract方法可以求出兩個事件准確的日期差。 16 label5.Text = "兩個日期之差是:" + Convert.ToString(d3.TotalDays) + "天"; 17 }
15 為程序添加多媒體功能
引用第三方COM組件形式的過程比較簡單,首先鼠標右擊工具箱,在彈出的快捷菜單中選擇“選擇項”,在打開的“選擇工具箱項”里面選擇頁式表的COM組件。我們此次選擇COM組件中的Windows Media Player組件,它是windows默認帶的流媒體播放器組件。
播放文件
從工具箱的對話框中選擇openFileDialog對象

1 openFileDialog1.ShowDialog(); 2 //通過openFileDialog對象打開文件對話框,選擇一個文件 3 axWindowsMediaPlayer1.URL = openFileDialog1.FileName;

16 .用戶自定義一個組件
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
int i = 0;
private void button1_Click(object sender, EventArgs e)
{
i++;
label1.Text = i.ToString();
}
}
|