C#學習筆記四 Windows表單應用程式

來源:互聯網
上載者:User

表單是程式與使用者互動的視覺化介面,表單也是對象,表單類定義了產生表單的模版,執行個體化一個表單類就產生了一個表單。

.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);                }            }        }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.