表單是程式與使用者互動的視覺化介面,表單也是對象,表單類定義了產生表單的模版,執行個體化一個表單類就產生了一個表單。
.NET架構類庫的System.Windows.Forms命名空間中定義的Form類是所有表單類的基類。
1、常用屬性
屬性:表徵圖、標題、位置、背景等可在表單內容面板設定,也可以代碼實現。
(1)Name屬性:用來擷取或設定表單的名稱,在應用程式中可通過Name屬性來引用表單。
(2)WindowState屬性:用來擷取或設定表單的視窗狀態。取值有三種:Normal(表單正常顯示)、Minimized(表單以最小化形式顯示)和Maximized(表單以最大化形式顯示)。
(3)StartPosition屬性:用來擷取或設定運行時表單的起始位置。
(4)Text屬性:該屬性是一個字串屬性,用來設定或返回在視窗標題列中顯示的文字。
(5)AcceptButton屬性:該屬性用來擷取或設定一個值,該值是一個按鈕的名稱,當按Enter鍵時就相當於單擊了表單上的該按鈕。
(6)CancelButton屬性:該屬性用來擷取或設定一個值,該值是一個按鈕的名稱,當按Esc鍵時就相當於單擊了表單上的該按鈕。
(7)Modal屬性:該屬性用來設定表單是否為有模式顯示表單。如果有模式地顯示該表單,該屬性值為true;否則為false。當有模式地顯示表單時,只能對模式表單上的對象進行輸入。必須隱藏或關閉模式表單(通常是響應某個使用者操作),然後才能對另一表單進行輸入。有模式顯示的表單通常用做應用程式中的對話方塊。
(8)ActiveControl屬性:用來擷取或設定容器控制項中的作用中的控制項。表單也是一種容器控制項。
(9)ActiveMdiChild屬性:用來擷取多重文件介面(MDI)的當前活動子視窗。
(10)AutoScroll屬性:用來擷取或設定一個值,該值指示表單是否實現自動滾動。如果此屬性值設定為true,則當任何控制項位於表單工作區之外時,會在該表單上顯示捲軸。另外,當自動滾動開啟時,表單的工作區自動滾動,以使具有輸入焦點的控制項可見。
(11)Enabled屬性:用來擷取或設定一個值,該值指示控制項是否可以對使用者互動作出響應。如果控制項可以對使用者互動作出響應,則為true;否則為false。預設值為true。
(12)KeyPreview屬性:用來擷取或設定一個值,該值指示在將按鍵事件傳遞到具有焦點的控制項前,表單是否將接收該事件。值為true時,表單將接收按鍵事件,值為false時,表單不接收按鍵事件。
(13)ShowInTaskbar屬性:用來擷取或設定一個值,該值指示是否在Windows工作列中顯示表單。
(14)Visible屬性:用於擷取或設定一個值,該值指示是否顯示該表單或控制項。值為true時顯示表單或控制項,為false時不顯示。
(15)Capture屬性:如果該屬性值為true,則滑鼠就會被限定只由此控制項響應,不管滑鼠是否在此控制項的範圍內。
2、常用方法
自身表單 this.hide();
其它表單
Form2 f2 = new Form2();
f2.Show();
下面介紹一些表單的最常用方法。
(1)Show方法:該方法的作用是讓表單顯示出來,其調用格式為:
表單名.Show();
其中表單名是要顯示的表單名稱。
(2)Hide方法:該方法的作用是把表單隱藏出來,其調用格式為:
表單名.Hide();
其中表單名是要隱藏的表單名稱。
(3)Refresh方法:該方法的作用是重新整理並重畫表單,其調用格式為:
表單名.Refresh();
其中表單名是要重新整理的表單名稱。
(4)Activate方法:該方法的作用是啟用表單並給予它焦點。其調用格式為:
表單名.Activate();
其中表單名是要啟用的表單名稱。
(5)Close方法:該方法的作用是關閉表單。其調用格式為:
表單名.Close();
其中表單名是要關閉的表單名稱。
(6)ShowDialog方法:該方法的作用是將表單顯示為強制回應對話方塊。其調用格式為:
表單名.ShowDialog();
3.常用事件
為表單、控制項添加事件在屬性面板的“事件”選項卡裡操作。
(1)Load事件:該事件在表單載入到記憶體時發生,即在第一次顯示表單前發生。
(2)Activated事件:該事件在表單啟用時發生。
(3)Deactivate事件:該事件在表單失去焦點成為不活動表單時發生。
(4)Resize事件:該事件在改變表單大小時發生。
(5)Paint事件:該事件在重繪表單時發生。
(6)Click事件:該事件在使用者單擊表單時發生。
(7)DoubleClick事件:該事件在使用者雙擊表單時發生。
(8)Closed事件:該事件在關閉表單時發生。
4. 添加事件
以表單Load事件為例:
Load(載入)事件發生於Form表單的載入時候,其設定步驟如下。
(1)開啟VS2008,建立一個Windows表單應用程式,並命名為FormEventTest。
(2)開啟其Form1的屬性視窗,切換到“事件”選項卡(一個閃電標誌)
(3)找到Load事件項,然後雙擊進入該事件代碼編輯檔案Form1.cs,為其編寫代碼。
private void MainForm_Load(object sender, EventArgs e) { if (MessageBox.Show("我是文本:查看表單2", "我是標題", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { Form2 f2 = new Form2(); f2.Show(); } } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("是否關閉視窗","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning); if (dr == DialogResult.Yes) { e.Cancel = false; } else { e.Cancel = true; } }
事實上,和VB類似,直接在表單上雙擊就會進入Load事件編輯代碼
5.繼承表單
繼承表單就是根據現有表單的結構建立一個與其一樣的新表單,這種從現有表單繼承的過程稱為可視化繼承。
兩種方式建立繼承表單
編程方式:
繼承選取器:
6.控制項
表單由控制項構成,控制項分常用控制項和進階控制項,常用控制項主要有文本類控制項、選擇類控制項及分組控制項等。
C#控制項的基類是System.Windows.Forms命名空間下的Control類
文本類控制項:Label、Button、TextBox、RichTextBox
選擇類控制項:CheckBox、ComboBox、ListBox、RadioButton
分組控制項:GroupBox、Panel、FlowLayoutPanel、SplitContainer、TabControl、TableLayoutPanel
C#控制項一覽:
介紹了多種常用控制項的屬性、方法和事件。
7. 特殊實現
(1)啟動歡迎介面
將該介面設定為歡迎介面,添加Timer控制項,倒計時數秒後啟動主介面
(2)多表單應用程式設定啟動表單
在Program.cs中,改變Run方法的參數
public static void Run(From mainFrom);
例如:Application.Run(new Form1());
其中,Form1為表單名
(3)程式退出
表單相關事件
this.hide(); //隱藏
this.show(); 顯示
this.Close(); 關閉,注意會關閉整個應用程式
Application.Exit(); 關閉,注意會關閉整個應用程式
(4)“接受”按鈕、“取消”按鈕
private void Form1_Load(object sender, EventArgs e) { this.AcceptButton = button1; //設定為“接受”按鈕,Enter鍵相當於單擊該按鈕 this.CancelButton = button2; //設定為“取消”按鈕,Esc鍵相當於單擊該按鈕 }
(5)啟動瀏覽器開啟網頁
System.Diagnostics.Process.Start(e.LinkText); //e.LinkText換成具體連結
(6)判斷某字串是否為數字型
int a;
if(Int32.TryParse(textBox1.Text, out a))
{
//MessageBox.Show("數字");
}
else
{
MessageBox.Show("非數字");
}
8. 文字框 TextBox
密碼文字框:設定文字框的PasswordChar屬性,或UseSystemPasswordChar屬性
多行文字框:Multiline屬性設為True
反白:設定SelecttionStart、SelectionLength屬性
9. RichTextBox
有格式文本控制項,用於顯式、輸入和操作帶有格式的文本,比如實現顯式字型、顏色、連結、從檔案載入文本、及嵌入的圖形、撤銷重複編輯操作以及尋找字串功能。
private void Form1_Load(object sender, EventArgs e) { this.AcceptButton = button1; //設定為“接受”按鈕,Enter鍵相當於單擊該按鈕 this.CancelButton = button2; //設定為“取消”按鈕,Esc鍵相當於單擊該按鈕 richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //只顯式垂直捲軸 richTextBox1.SelectionFont = new Font("楷體",12,FontStyle.Bold); //字型大小、加粗 richTextBox1.SelectionColor = System.Drawing.Color.Blue; //字型顏色藍色 richTextBox1.Text = "歡迎登入http://www.cumt.edu.cn礦大"; //設定文本,自動加超連結 richTextBox1.SelectionBullet = true;//控制項內容以項目符號清單的格式排列 richTextBox1.SelectionIndent = 8; //左邊緣距離 richTextBox1.SelectionRightIndent = 12; //右邊緣距離 richTextBox1.SaveFile("C://tang.RTF"); //儲存內容到檔案,三種格式 } //RichTextBox的連結點擊訊息處理 private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e) { // 編寫連結點擊事件,啟動瀏覽器瀏覽連結 System.Diagnostics.Process.Start(e.LinkText); }
10.下拉式方塊 ComboBox
(1)DropDownStyle:設定樣式
Simple:列表部分總是可見
DropDown:為預設值,可編輯文字框
DropDownList:不能編輯文字框
(2)SelectAll() 方法選擇可編輯框的所有文本
11 複選框 CheckBox
CheckState屬性:是否選中,值為Checked、Unchecked
12.選項按鈕
checked屬性:是否選中職位True,
13.數值選擇控制項
(1)用於顯示和輸入數值,提供上下箭頭,使用者可以直接輸入,也可以用箭頭修改數值
Maximum:最大值
Mininmun:最小值
Value:值
(2)顯式格式
DecimalPlaces:小數點後位元,預設0
ThousandsSeparater:千分符,預設false
Hexadecimal :十六進位顯式
14.清單控制項 ListView
(1)添加刪除項目:ListBox控制項Items屬性的Add方法、Remove方法
(2)當前選中項目:ListBox的SelectedItem屬性
(3)多選:SelectionMode屬性
MultiExtended(可用Shift、Ctrl鍵)
MultiSimple 多選
One:單選
None:無法選擇
(4)選中的項數
listBox1.SelectedItems.Count.ToString(); 多選情況下
樣式、列標題、列寬設定
listView1.View = View.Details; //視圖樣式,
listView1.Columns.Add("檔案名稱"); //添加標題
listView1.Columns.Add("路徑");
listView1.Columns.Add("大小");
listView1.Columns.Add("建立時間");
listView1.Columns[0].Width = 100; //設定寬度
listView1.Columns[1].Width = 200; //設定寬度
listView1.Columns[2].Width = 100; //設定寬度
listView1.Columns[3].Width = 100; //設定寬度
//添加項
listView1.Items.Clear(); //清空
listView1.Items.Add(processes[i].ProcessName);
listView1.Items[listView1.Items.Count - 1].SubItems.Add(processes[i].Id.ToString());
listView1.Items[listView1.Items.Count - 1].SubItems.Add(processes[i].Id.ToString());
listView1.Items[listView1.Items.Count - 1].SubItems.Add(processes[i].Id.ToString());
15.分組控制項
Panel:
GroupBox:群組方塊
TabControl:選項卡
(1)為選項卡設定表徵圖,改變選項卡標題
建立一個windows應用程式,向表單添加一個ImageList控制項,然後像ImageList控制項添加圖形列表;
添加一個TabControl控制項,將其ImageList屬性設定為ImageList1控制項,並將TabPage選項卡的ImageIndex屬性設定為列表中相應映像的索引。
可以直接在屬性面板操作,也可以編寫以下代碼
private void Form1_Load(object sender, EventArgs e) { tabControl1.ImageList = imageList1; tabPage1.ImageIndex = 0; tabPage1.Text = "選項卡1"; tabPage2.ImageIndex = 2; tabPage2.Text = "選項卡2"; }
(2)將選項卡顯示為按鈕
將TabControl控制項的Appearence屬性設定為Buttons或FlatButtons,可以將選項卡顯示為按鈕樣式。(三維按鈕、平面按鈕)
tabControl1.Appearance = TabAppearance.Buttons;
(3)在選項卡中新增控制項
private void button3_Click(object sender, EventArgs e) { Button btn1 = new Button(); btn1.Text = "新增按鈕"; tabPage1.Controls.Add(btn1); }
(4)添加、移除選項卡
添加:TabPages屬性的Add方法
string title = "新增選項卡" + (tabControl1.TabCount+1);
TabPage myTabPage = new TabPage(title);
tabControl1.TabPages.Add(myTabPage);
刪除:TabPages屬性的Remove方法
tabControl1.TabPages.Remove(tabControl1.SelectedTab);
移除所有選項卡:TabPages屬性的clear
(5)DataGridView
列寬設定 無效?
需要把列的 AutoSizeMode 屬性設為None,寬度設定才會生效。
欄位標題置中
dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //標題置中
列置中對齊
dataGridView1.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
如何讓全部列填充滿整個控制項?
點擊datagridview右上方的小三角->"編輯列"->選中最後一列->右邊的屬性框有個“布局”->"AutoSizeMode"的屬性,設定它為Fill就Ok了
dataGridView選中的時候選中正行而不是一個儲存格
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //選中正行,而非儲存格
最左列的賦值
datagridview.Rows[i].HeaderCell.Value
最左列的顯示與改變寬度
dataGridView1.RowHeadersVisible = false; //最左側列 隱藏
dataGridView1.RowHeadersWidth = 60; //設定寬度
防刪除出錯
int indexid = dataGridView1.CurrentRow.Index; //當前行
//MessageBox.Show(dataGridView1.Rows.Count.ToString() + indexid.ToString());
if (indexid < 0 || indexid >= dataGridView1.Rows.Count - 1)
{ }
else
{
if (MessageBox.Show("確定刪除嗎?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
}
}
datagridview 控制項左側的固定列能顯示出序號嗎?
(左側的固定列有點寬,而且有一個右箭頭,想讓這一列能顯示出遞增的序號)
http://topic.csdn.net/u/20100921/11/88ab1c8e-5c96-4ae0-9b73-db62af5ae16b.html
private void dataGridView1_RowPostPaint_1(object sender, DataGridViewRowPostPaintEventArgs e) { Rectangle rowHeaderBounds = new Rectangle ( 2, e.RowBounds.Top, this.dataGridView1.RowHeadersWidth-2, e.RowBounds.Height - 1 ); using (Brush backbrush = new SolidBrush(SystemColors.Control)) { e.Graphics.FillRectangle(backbrush, rowHeaderBounds); } if (e.RowIndex >= dataGridView1.FirstDisplayedScrollingRowIndex) { using (SolidBrush b = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor)) { int linen = 0; linen = e.RowIndex + 1; string line = linen.ToString(); e.Graphics.DrawString(line, e.InheritedRowStyle.Font, b, e.RowBounds.Location.X, e.RowBounds.Location.Y + 5); SolidBrush B = new SolidBrush(Color.Red); } } }