C#-Windows應用程序設計基礎_第1頁
C#-Windows應用程序設計基礎_第2頁
C#-Windows應用程序設計基礎_第3頁
C#-Windows應用程序設計基礎_第4頁
C#-Windows應用程序設計基礎_第5頁
已閱讀5頁,還剩215頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第9章

Windows應用程序設計基礎

C#是一種可視化的程序設計語言。Windows窗體和控件是開發(fā)C#應用程序的基礎,窗體和控件在C#程序設計中扮演著重要的角色。在C#中,每個Windows窗體和控件都是對象,都是類的實例。窗體是可視化程序設計的基礎界面,是其他對象的載體和容器??丶翘砑拥酱绑w對象上的對象,每個控件都有自己的屬性、方法和事件以完成特定的功能。Windows應用程序設計還體現(xiàn)了另外一種思維,即對事件的處理。22024/5/11C#程序設計實用教程本章將介紹建立Windows應用程序、使用WindowsForms常用控件、菜單和多文檔界面設計等。同時向大家展示用Windows窗體來編寫程序的特點以及技巧。32024/5/11C#程序設計實用教程

9.1Windows應用程序的結構

VS.NET集成開發(fā)環(huán)境是基于.NETFramework構建的,該框架提供了一個有條理的、面向對象的、可擴展的類集,它使用戶得以開發(fā)豐富的Windows應用程序。通過Windows“窗體設計器”進行設計窗體,用戶就可以創(chuàng)建Windows應用程序和客戶機/服務器應用程序。用戶可對窗體設定某些特性并在其上添加控件,然后編寫代碼以增加控件和窗體的功能。42024/5/11C#程序設計實用教程

9.1Windows應用程序的結構

VS.NET提供了很多工具可以使應用程序的開發(fā)快捷、可靠。這些工具包括:Windows窗體可視化設計器。識別代碼編輯器。集成的編譯和調試。項目管理工具。52024/5/11C#程序設計實用教程

9.1Windows應用程序的結構

典型的Windows應用程序通常包括窗體(Forms)、控件(Controls)和相應的事件(Events)。下面通過C#設計實現(xiàn)一個簡單的計算器,要求能夠實現(xiàn)基本的加、減、乘、除功能,并以這個“計算器”為例,來了解和掌握Windows應用程序的一般開發(fā)過程。62024/5/11C#程序設計實用教程

9.1.1計算器窗體

Windows窗體就是創(chuàng)立Windows應用程序的框架。在VS.NET中創(chuàng)建Windows應用程序的第一步就是建立這個框架。操作步驟如下:(1)運行VS.NET,在【起始頁】上單擊【新建項目】按鈕,打開“新建項目”對話框,如圖9-1所示。在“項目類型”列表框中指定項目的類型為“ViusalC#”,在“模板”列表框中選擇“Windows應用程序”模板,在“名稱”文本框中輸入Calculator,在“位置”下拉列表中選定保存項目的位置。72024/5/11C#程序設計實用教程

9.1.1計算器窗體

(2)單擊“確定”按鈕后就進入VS.NET的主界面,如圖9-2所示。8從圖9-2可以看出,當選擇“Windows應用程序”作為應用程序的模板后,系統(tǒng)會自動為用戶生成一個空白窗體,一般名為Form1。該窗體就是應用程序運行時顯示給用戶的操作界面,下一步就是向窗體中添加各種控件。2024/5/11C#程序設計實用教程

9.1.2計算器控件

控件表示用戶和程序之間的圖形化連接??丶梢蕴峁┗蛱幚頂?shù)據(jù)、接受用戶輸入、對事件做出響應或執(zhí)行連接用戶和應用程序的其他功能。因為控件本質上是具有圖形接口的組件,所以它能通過組件所提供的功能并與用戶交互。窗體中的控件有很多,“工具箱”中的“Windows窗體”里包含了所有Windows的標準控件,用戶還可以根據(jù)需要自己定義控件。通過在“屬性”窗口中改變控件的屬性可以改變的外觀和特性。92024/5/11C#程序設計實用教程

9.1.2計算器控件

本例中需要用到如下所列的控件:(1)按鈕:16個。10個數(shù)字按鈕分別用于表示0~9;4個運算符按鈕表示“+”、“-”、“*”、“\”;1個“計算”按鈕用于實施計算操作;1個“清空”按鈕用于清除上次計算結果。(2)標簽:1個。

用于標示計算結果所在的文本框。(3)文本框:1個。

用于顯示計算結果。102024/5/11C#程序設計實用教程

9.1.2計算器控件

具體添加控件步驟如下:首先向窗體中添加按鈕(Button)。具體操作為:在工具箱中單擊Button,然后移動鼠標指針到窗體中的預定位置,按下左鍵拖動鼠標,劃出一個方框,釋放鼠標左鍵后,一個按鈕就被添加到剛才方框的位置了。調整好大小和位置后單擊選中該按鈕,在“屬性”窗口中可以看到該控件名為Button1,將該按鈕的Text屬性設置為“1”。繼續(xù)在窗體中添加其余15個按鈕,并分別設置好它們的屬性。112024/5/11C#程序設計實用教程

9.1.2計算器控件

界面設計已經(jīng)完成了,接下來的事情就是為各個控件添加相應的事件代碼了。12按照同樣的方法在窗體中添加一個標簽(Label),設置其Text屬性為“結果”,再添加一個文本框(TextBox),并設置其Text屬性為空。最后,一個簡單的計算器的界面就完成了,如圖9-3所示。2024/5/11C#程序設計實用教程

9.1.3計算器事件

在C#中,基于Windows應用程序設計方法是事件驅動的。事件驅動不是由程序的順序來控制的,而是由事件的發(fā)生來控制的。事件驅動程序設計是圍繞著消息的產(chǎn)生與處理而展開的,消息就是關于發(fā)生的事件的信息。Windows程序員的工作就是對所開發(fā)的應用程序所要發(fā)出或者接收的消息進行排序和管理。事件驅動程序方法提供了許多便利,對于那些需要大范圍用戶干預的應用程序來說,更是很有用處。132024/5/11C#程序設計實用教程

9.1.3計算器事件

在“窗體設計器”中看到的是窗體及其中的控件,而要為控件添加事件處理程序就必須先切換到代碼編輯器狀態(tài)。切換到代碼編輯器有以下幾種方法:(1)雙擊窗體或者某控件。(2)在解決方案資源管理器中右鍵單擊Form1.cs,從快捷菜單中選擇“查看代碼”命令。如果選擇“視圖設計器”則可以回到“窗體設計器”中。(3)當?shù)谝淮吻袚Q到代碼編輯器之后,在窗體標題“Form1.cs[設計]”的左邊會自動出現(xiàn)一個新的標題:Form1.cs,單擊該標題就可以切換到代碼編輯器。反之,如果單擊“Form1.cs[設計]”則會切換到“窗體設計器”。142024/5/11C#程序設計實用教程

9.1.3計算器事件

下面分析一下計算器中各個控件到底應該添加什么樣的代碼。對于計算器來說,當單擊某個數(shù)字鍵后,結果顯示區(qū)內應顯示該鍵上的數(shù)字。因此,可以雙擊按鈕“1”,切換到代碼編輯器,此時光標就停留在該按鈕所對應的代碼處,輸入下列代碼:privatevoidbtn1_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text+=btn.Text;}152024/5/11C#程序設計實用教程

9.1.3計算器事件

繼續(xù)給其他數(shù)字按鈕添加同樣的代碼。然后給4個運算符按鈕添加下列代碼:privatevoidbtnAdd_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔數(shù)字各運算符}162024/5/11C#程序設計實用教程

9.1.3計算器事件

privatevoidbtnSub_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔數(shù)字各運算符}

privatevoidbtnMul_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔數(shù)字各運算符}172024/5/11C#程序設計實用教程

9.1.3計算器事件

privatevoidbtnDiv_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔數(shù)字各運算符}接下來給“清空”按鈕添加如下代碼:privatevoidbtnClear_Click(objectsender,EventArgse){textBox1.Text="";}182024/5/11C#程序設計實用教程

9.1.3計算器事件

最后給“計算”按鈕添加下列代碼:privatevoidbtnCalculate_Click(objectsender,EventArgse){Singler;//用于保存計算結果stringt=textBox1.Text;

//t用于保存文本框中的算術表達式intspace=t.IndexOf('');//用于搜索空格位置strings1=t.Substring(0,space);//s1用于保存第一個運算數(shù)charop=Convert.ToChar(t.Substring(space+1,1));//op用于保存運算符strings2=t.Substring(space+3);//s2用于保存第二個運算數(shù)Singlearg1=Convert.ToSingle(s1);//將運算數(shù)從string轉換為SingleSinglearg2=Convert.ToSingle(s2);

192024/5/11C#程序設計實用教程

9.1.3計算器事件

switch(op){case'+':r=arg1+arg2;break;case'-':r=arg1-arg2;break;case'*':r=arg1*arg2;break;

202024/5/11C#程序設計實用教程

9.1.3計算器事件

case'/':if(arg2==0){thrownewApplicationException();}else{r=arg1/arg2;break;}break;default:thrownewApplicationException();}212024/5/11C#程序設計實用教程

9.1.3計算器事件

//將計算結果顯示在文本框中textBox1.Text=r.ToString();}現(xiàn)在,所有的工作都完成了。在“調試”菜單中選擇“啟動”命令或者“開始執(zhí)行(不調試)”命令運行該應用程序,計算器可以工作了。222024/5/11C#程序設計實用教程

9.2Windows窗體

通過“計算器”這個例子,已初步了解了Windows應用程序的結構。下面具體介紹Windows應用程序的設計和開發(fā)。一個應用程序除了需要實現(xiàn)應有的功能外,還必須具有良好的用戶界面。在C#中,Windows應用程序的界面是以窗體(Form)為基礎的,窗體是Windows應用程序的基本單位,用來向用戶展示信息和接受用戶的輸入。窗體可以是標準窗口、多文檔界面(MDI)窗口、對話框的顯示界面。232024/5/11C#程序設計實用教程

9.2Windows窗體

窗體就好像一個容器,其他界面元素都可以放置在窗體中。C#中以類Form來封裝窗體,一般來說,用戶設計的窗體都是類Form的派生類,用戶窗體中添加其他界面元素的操作實際上就是向派生類中添加私有成員。當新建一個Windows應用程序項目時,C#就會自動創(chuàng)建一個默認名為Form1的Windows窗體。242024/5/11C#程序設計實用教程

9.2Windows窗體

Windows窗體由以下4部分組成:標題欄控制按鈕邊界窗口區(qū)252024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

Windows窗體的屬性可以決定窗體的外觀和行為,其中常用的屬性有:名稱(Name)屬性、標題(Text)屬性、控制菜單屬性和影響窗體外觀的屬性。1.窗體的名稱屬性(Name)Name用于設置窗體的名稱,該屬性值作為窗體的標志,用于在程序中引用窗體。在初始新建一個Windows應用程序項目時,自動創(chuàng)建一個窗體,該窗體的名稱被自動命名為Form1;添加第2個窗體時,其名稱被自動命名為Form2,依次類推。通常而言,在設計Windows窗體時,可給其Name屬性設置一個有實際含義的名字。262024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

2.窗體的標題屬性(Text)Text屬性用于設置窗體標題欄顯示的內容,它的值是一個字符串。通常,標題欄顯示的內容應能概括地說明窗體的內容或作用。例如,對于一個登錄窗體,其欄題欄設置為“歡迎登錄!”。272024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

3.窗體的控制菜單屬性在C#應用程序中的Windows窗體,一般都顯示控制菜單,以方便用戶的操作。

(1)ControlBox屬性:該屬性用來設置窗體上是否有控制菜單。其默認值True,窗體上顯示控制菜單。若將該屬性設置為False,則窗體上不顯示控制菜單,如圖9-4所示。282024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

(2)MaximizeBox屬性:用于設置窗體上的最大化按鈕。其默認值True,窗體上顯示最大化按鈕。若將該屬性設置為False,則窗體上不顯示最大化按鈕。(3)MinimizeBox屬性:用于設置窗體上的最小化按鈕。其默認值True,窗體上顯示最小化按鈕。若將該屬性設置為False,則窗體上不顯示最小化按鈕。292024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

4.設置窗體外觀的屬性(1)FormBorderStyle屬性:用于控制窗體邊界的類型。它有7個可選值,可選值說明如表9-1所示。302024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

(2)Size屬性:用來設置窗體的大小。(3)Location屬性:設置窗體在屏幕上的位置,即設置窗體左上角的坐標值。(4)BackColor屬性:用于設置窗體的背景顏色,可以從彈出的調色板中選擇。312024/5/11C#程序設計實用教程

9.2.1Windows窗體的基本屬性

(5)BackgroundImage屬性:用于設置窗體的背景圖像。(6)Opacity屬性:該屬性用來設置窗體的透明度。5.設置窗體可見性的屬性窗體的可見性由Visible屬性來控制。322024/5/11C#程序設計實用教程

9.2.2創(chuàng)建窗體

通常,在開發(fā)項目時,一個窗體往往不能滿足,通常需要用到多個窗體。C#提供了多窗體處理能力,在一個項目中可創(chuàng)建多個窗體,添加新窗體的方式如下:(1)選擇項目菜單下的“添加Windows窗體”命令,打開“添加新項”對話框,如圖9-5所示。332024/5/11C#程序設計實用教程

9.2.2創(chuàng)建窗體

(2)在“添加新項”對話框的模板框內,選擇“Windows窗體”模板,然后,單擊“打開”按鈕,就添加一個新的Windows窗體。完成添加窗體后,在解決方案資源管理器窗口中雙擊對應的窗體,則在Windows窗體設計器中,可顯示該窗體。342024/5/11C#程序設計實用教程

9.2.3設置啟動窗體屬性

當在應用程序中添加了多個窗體后,默認情況下,應用程序中的第一個窗體被自動指定為啟動窗體。在應用程序開始運行時,此窗體就會首先顯示出來。如果想實現(xiàn)在應用程序啟動時,顯示別的窗體,那么就要設置啟動窗體。如何實現(xiàn)設置啟動窗體,請看例9-1?!纠?-1】C#設置啟動窗體。步驟如下:(1)

在一個項目中,添加兩個窗體。352024/5/11C#程序設計實用教程

9.2.3設置啟動窗體屬性

(2)在解決方案中,有一個Program.cs文件,雙擊此文件,此時該文件的代碼如下所示:staticclassProgram{staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newForm1());}}362024/5/11C#程序設計實用教程

9.2.3設置啟動窗體屬性

(3)要實現(xiàn)先啟動Form2,只需在Program.cs文件中修改此行“Application.Run(newForm1());”代碼為“Application.Run(newForm2());”,即可。(4)運行程序,先啟動的窗體為Form2。372024/5/11C#程序設計實用教程

9.2.4窗體的顯示與隱藏

1.窗體的顯示如果要在一個窗體中通過按鈕打開另一個窗體,就必須通過調用Show()方法顯示窗體。語法如下: publicvoidShow();【例9-2】在Form1窗體中添加一個Button按鈕,在按鈕的Click事件中調用Show(),打開Form2窗體。代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){Form2frm2=newForm2();//實例化Form2frm2.Show();//調用Show方法顯示Form2窗體}382024/5/11C#程序設計實用教程

9.2.4窗體的顯示與隱藏

2.窗體的隱藏通過調用Hide()方法隱藏窗體。語法如下:

publicvoidHide();【例9-3】通過登錄窗體登錄系統(tǒng),輸入用戶名和密碼后,單擊“登錄”按鈕,隱藏登錄窗體,顯示主窗體。關鍵代碼如下: this.Hide();

//調用Hide方法隱藏當前窗體 frmMainfrm=newfrmMain();//實例化frmMain frm.Show();//調用Show方法顯示frmMain窗體392024/5/11C#程序設計實用教程

9.2.5窗體的事件

Windows是事件驅動的操作系統(tǒng),對Form類的任何交互都是基于事件來實現(xiàn)的。Form類提供了大量的事件用于響應對窗體執(zhí)行的各種操作。窗體設計人員往住關心窗體的加載和關閉,通常在加載時進行界面和數(shù)據(jù)的初始化。在關閉前進行資源的釋放等清理操作,也可以取消關閉操作。下面詳細介紹窗體的Click、Load和FormClosing事件。402024/5/11C#程序設計實用教程

9.2.5窗體的事件

1.Click(單擊)事件當單擊窗體時,將會觸發(fā)窗體的Click事件。語法如下: publiceventEventHandlerClick【例9-4】在窗體的Click事件中編寫代碼,實現(xiàn)當單擊窗體時,彈出提示框。代碼如下:privatevoidForm1_Click(objectsender,EventArgse){MessageBox.Show("已經(jīng)單擊了窗體!");//彈出提示框}412024/5/11C#程序設計實用教程

9.2.5窗體的事件

程序的運行如圖9-6所示。422024/5/11C#程序設計實用教程

9.2.5窗體的事件

2.Load(加載)事件當?shù)谝淮沃苯踊蜷g接調用Form.Show方法來顯示窗體時,窗體就會進行且只進行一次加載,并且在必需的加載操作完成后會引發(fā)Load事件。通常,在Load事件響應函數(shù)中執(zhí)行一些初始化操作。語法如下: publiceventEventHandlerLoad432024/5/11C#程序設計實用教程

9.2.5窗體的事件

【例9-5】在下述程序,在窗體的Load事件中對窗體的大小、標題、顏色等屬性進行了設置。privatevoidForm1_Load(objectsender,EventArgse){this.Width=1000;this.Height=500;this.ForeColor=Color.Cyan;this.BackColor=Color.Red;this.Text="Welcomeyou!";}442024/5/11C#程序設計實用教程

9.2.5窗體的事件

程序的運行如圖9-7所示。452024/5/11C#程序設計實用教程

9.2.5窗體的事件

3.FormClosing(關閉)事件Form類的FormClosing事件是在窗體關閉時引發(fā)的事件,直接或間接調用Form.Close()方法都會引發(fā)事件。在FormClosing事件中,通常進行關閉前的確認和資源釋放操作。語法如下: publiceventFormClosingEventHandlerFormClosing【例9-6】創(chuàng)建一個Windows應用程序,實現(xiàn)當關閉窗體之前,彈出提示框,詢問是否關閉當前窗體,單擊“是”按鈕,關閉窗體,代碼如下。462024/5/11C#程序設計實用教程

9.2.5窗體的事件

privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){DialogResultdr=MessageBox.Show("是否關閉窗體","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);if(dr==DialogResult.Yes)//使用if語句判定是否單擊“是”按鈕

{e.Cancel=false;

//如果單擊“是”按鈕則關閉窗體

}else

{e.Cancel=true;

//否則,不執(zhí)行操作}}472024/5/11C#程序設計實用教程

9.2.5窗體的事件

程序的運行如圖9-8所示。482024/5/11C#程序設計實用教程

9.3窗體控件概述

控件是包含在窗體上的對象,是構成用戶界面的基本元素,也是C#可視化編程的重要工具。使用控件可使程序的設計簡化避免大量重復性工作,簡化設計過程,有效地提高設計效率。對于一個程序開發(fā)人員而言,必須掌握每類控件的功能、用途,并掌握其常用的屬性、事件和方法。492024/5/11C#程序設計實用教程

9.3窗體控件概述

在VS2005中,工具箱中包含了建立應用程序的各種控件。工具箱分為Windows窗體、公共控件、容器、菜單和工具欄、數(shù)據(jù)、組件、打印、對話框等部分,常用的Windows窗體控件放在“Windows窗體”選項卡下。工具箱中有數(shù)十個常用的Windows窗體控件,它們以圖標的方式顯示在工具箱中,其名稱顯示于圖標的右側。502024/5/11C#程序設計實用教程

9.3窗體控件概述

在介紹具體控件之前,首先在此探討一下各個控件共有的屬性、事件和方法。在C#中,所有的窗體控件,比如標簽控件、文本框控件、按鈕控件等全部都是繼承于:System.Windows.Forms.Control。作為各種窗體控件的基類,Control類實現(xiàn)了所有窗體交互控件的基本功能。Control類的屬性、方法和事件是所有窗體控件所公有的,而且其中很多是在編程中經(jīng)常會遇到的。512024/5/11C#程序設計實用教程

9.3窗體控件概述

(1)Control類的屬性Control類的屬性描述了一個窗體控件的所有公共屬性,可以在屬性(Properties)窗口中查看或修改窗體控件的屬性。常用的屬性如下:Name屬性每一個控件都有一個Name(名字)屬性,在應用程序中,可通過此屬性來引用這個控件。C#會給每個新添加的控件指定一個默認名。在應用程序設計中,可根據(jù)需要將控件的默認名字改成更有實際代表意義的名字。522024/5/11C#程序設計實用教程

9.3窗體控件概述

Text屬性在C#中,每一個控件對象都有Text屬性。Text屬性在很多控件中都有重要的意義和作用。例如,在標簽控件中顯示的文字、在文本框中用戶輸入的文字、組合框和窗體中的標題等都是用控件的Text進行設定的。對于Text屬性的設置過程及設置結果如圖9-9、9-10所示。532024/5/11C#程序設計實用教程

9.3窗體控件概述

Anchor屬性Anchor的意思是“錨”,那么Anchor屬性是用來確定此控件與其容器控件的固定關系的。在此,所謂容器控件是指什么呢?顧名思義,容器控件就是像一般的容器一樣可以存放別的控件的控件!例如,窗體控件中會包含很多的控件,像標簽控件、文本框等。這時,稱包含控件的控件為容器控件或父控件,而里面的控件為子控件。顯然,這必然涉及到一個問題,即子控件與父控件的位置關系問題。即當父控件的位置、大小變化時,子控件按照什么樣的原則改變其位置、大小。Anchor屬性就用于設置此原則。542024/5/11C#程序設計實用教程

9.3窗體控件概述

對于Anchor屬性,可以設定Top、Bottom、Right、Left中任意的幾種,設置的方法非常直觀,如圖9-11所示。552024/5/11C#程序設計實用教程

9.3窗體控件概述

圖9-11中選中變黑的方位即為設定的控件方位,圖中所示的方位為Top、Left、Bottom。此時,如果容器控件變化,子控件將保證其上邊緣與容器上邊的距離、左邊緣與容器左邊的距離,底邊與容器底邊的距離。其運行效果如圖9-12所示。562024/5/11C#程序設計實用教程

9.3窗體控件概述

Dock屬性Dock屬性規(guī)定了子控件與父控件的邊緣依賴關系。Dock的效果,如圖9-13所示。57Dock的值有6種,分別是Top、Bottom、Left、Right、Fill,最后還有默認值None。一旦Dock值被設定,子控件就會發(fā)生變化與父控件選定的邊緣相融在一起。2024/5/11C#程序設計實用教程

9.3窗體控件概述

(2)Control類的方法可以調用Control類的方法來獲得控件的一些信息,或者設置控件的屬性值及行為狀態(tài)。例如:Focus方法可設置此控件獲得的焦點;Refresh方法可重畫控件;Select方法可激活控件;Show方法可顯示控件等。582024/5/11C#程序設計實用教程

9.3窗體控件概述

(3)Control類的事件在C#中,當用戶進行某一項操作時,會引發(fā)某個事件的發(fā)生,此時就會調用事件處理程序代碼,實現(xiàn)對程序的控制。事件驅動實現(xiàn)是基于窗體的消息傳遞和消息循環(huán)機制的。在C#中,所有的機制都被封裝在控件之中,極大方便了編寫事件的驅動程序。如果希望能夠更加深入地操作,或定義自己的事件,就需要聯(lián)合使用委托(Delegate)和事件(Event),可以靈活地添加、修改事件的響應,并自定義事件的處理方法。例如,Control類的可響應的事件有:單擊時發(fā)生的Click事件;雙擊時發(fā)生的DoubleClick事件;取得焦點時發(fā)生的GetFocus事件;鼠標移動時發(fā)生的MouseMove事件等。592024/5/11C#程序設計實用教程

9.4常用控件

窗體是由一個個控件構成的,因此熟悉控件是進行合理、有效的程序開發(fā)的重要前提。本節(jié)內容將針對Windows窗體應用程序中常見的控件進行詳細介紹。602024/5/11C#程序設計實用教程

9.4.1按鈕控件

按鈕(Button)是用戶與應用程序交互的最常用的工具。它用于接收用戶的操作信息,去執(zhí)行預先規(guī)定的命令,觸發(fā)相應的事件過程,以實現(xiàn)指定的功能。1.常用屬性(1)Text屬性該屬性用于設定按鈕上顯示的文本。該屬性也可為按鈕創(chuàng)建快捷方式,其方法是在作為快捷鍵的字母前加一個“&”字符,則在程序運行時,命令按鈕上該字母帶有下劃線,該字母就成為快捷鍵。例如,某個按鈕的Text屬性設置為“&Display”,程序運行時,就會顯示為“Display”。612024/5/11C#程序設計實用教程

9.4.1按鈕控件

(2)FlatStyle屬性該屬性指定了按鈕的外觀風格,它有4個可選值。分別是:Flat、Popup、System、Standard。該屬性的默認值為Standard。(3)Image屬性用于設定在按鈕上顯示的圖形。(4)ImageAlign屬性當圖片顯示在命令按鈕上時,可以通過ImageAlign屬性調節(jié)其在按鈕上的位置。(5)Enable屬性用于設定控件是否可用,不可用,則用灰色表示。(6)Visible屬性用于設定控件是否可見,不可見,則隱藏。注意:上述的屬性中,前4項為外觀屬性;而后2項為行為屬性。622024/5/11C#程序設計實用教程

9.4.1按鈕控件

2.響應的事件如果按鈕具有焦點,就可以使用鼠標左鍵、Enter鍵或空格鍵觸發(fā)該按鈕的Click事件。當使用ShowDialog方法顯示窗體時,可以使用按鈕的DialogResult屬性指定ShowDialog的返回值?!纠?-7】按鈕控件的運用。(1)為窗體Form1添加一個計數(shù)器nCounter,并添加3個按鈕控件,分別完成遞增計數(shù)器、遞減計數(shù)器、通過消息框提示計數(shù)器的值的功能,并添加1個Label控件來顯示每次運算后的計數(shù)器值。完成的窗體界面如圖9-14所示。632024/5/11C#程序設計實用教程

9.4.1按鈕控件

(2)設置窗體和各控件的屬性,如表9-2所示。642024/5/11C#程序設計實用教程

9.4.1按鈕控件

(3)切換到代碼窗口,創(chuàng)建事件過程:privateintnCounter;

//第一次加載時,進行計數(shù)器和lblResult的初始化privatevoidForm1_Load(objectsender,EventArgse){this.nCounter=50;this.ShowCounter();}//進行遞增操作,并提示新值privatevoidbtnInc_Click(objectsender,EventArgse){this.nCounter++;this.ShowCounter();}652024/5/11C#程序設計實用教程

9.4.1按鈕控件

//進行遞減操作,并提示新值privatevoidbtnDes_Click(objectsender,EventArgse){this.nCounter--;this.ShowCounter();}

//通過MessageBox提示當前的值privatevoidbtnMsg_Click(objectsender,EventArgse){stringstrMsg="當前計數(shù)器="+this.nCounter.ToString("D8");MessageBox.Show(strMsg,"提示");

662024/5/11C#程序設計實用教程

9.4.1按鈕控件

//顯示計數(shù)器值到Label控件lblResultprivatevoidShowCounter(){stringstrMsg=this.nCounter.ToString("D8");this.lblResult.Text=strMsg;}672024/5/11C#程序設計實用教程

9.4.1按鈕控件

程序運行結果如圖9-15所示。682024/5/11C#程序設計實用教程

9.4.2標簽控件

標簽(Label)主要用來顯示文本。通常用標簽來為其他控件顯示說明信息、窗體的提示信息,或者用來顯示處理結果等信息。但是,標簽顯示的文本不能被直接編輯。除了顯示文本外,標簽還可使用Image屬性顯示圖像,或使用ImageIndex和ImageList屬性組合顯示圖像。692024/5/11C#程序設計實用教程

9.4.2標簽控件

1.常用屬性(1)Text屬性該屬性用于設定標簽顯示的文本,可通過TextAlign屬性設置文本的對齊方式。(2)BorderStyle屬性該屬性用于設定標簽的邊框形式,共有3個設定值,分別是None、FixedSingle、Fixed3D。該屬性的默認值為None。(3)BackColor屬性用于設定標簽的背景色。(4)ForeColor屬性用于設定標簽中文本的顏色。(5)Font屬性用于設定標簽中文本的字體、大小、粗體、斜體、刪除線等。702024/5/11C#程序設計實用教程

9.4.2標簽控件

(6)Image屬性用于設定標簽的背景圖片,可通過ImageAlign屬性設置圖片的對齊方式。(7)Enable屬性用于設定控件是否可用,不可用,則用灰色表示。(8)Visible屬性用于設定控件是否可見,不可見,則隱藏。(9)AutoSize屬性用于設定控件是否根據(jù)文本自動調整,設置為true表示自動調整。注意:上述的屬性中,前6項為外觀屬性;而后3項為行為屬性。712024/5/11C#程序設計實用教程

9.4.2標簽控件

2.響應的事件標簽控件常用的事件有:Click事件和DoubleClick事件。722024/5/11C#程序設計實用教程

9.4.2標簽控件

【例9-3】標簽控件的運用。對窗體上的3個標簽控件的參數(shù)進行設置,用來顯示文本。程序代碼如下:privatevoidForm1_Load(objectsender,EventArgse){//label1參數(shù)設置,默認字體為宋體9號、前景色為黑色this.label1.AutoSize=true;this.label1.BackColor=System.Drawing.Color.White;this.label1.Text="宋體9號-白底-黑字";

732024/5/11C#程序設計實用教程

9.4.2標簽控件

//label2參數(shù)設置,默認字體為宋體9號、前景色為黑色this.label2.AutoSize=true;this.label2.BackColor=System.Drawing.Color.Black;this.label2.Font=newSystem.Drawing.Font("宋體",10.5F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((byte)(134)));this.label2.ForeColor=System.Drawing.Color.White;this.label2.Text="宋體10號-黑底-白字“;

742024/5/11C#程序設計實用教程

9.4.2標簽控件

//label3參數(shù)設置this.label3.AutoSize=true;this.label3.BackColor=System.Drawing.Color.Blue;this.label3.Font=newSystem.Drawing.Font("楷體_GB2312",14.25F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((byte)(134)));this.label3.ForeColor=System.Drawing.Color.Red;this.label3.Text="楷體14號-藍底-紅字";}752024/5/11C#程序設計實用教程

9.4.2標簽控件

程序運行結果如圖9-16所示。762024/5/11C#程序設計實用教程

9.4.3文本框控件

在C#中,文本框(TextBox)是最常用的和最簡單的文本顯示和輸入控件。文本框有兩種用途,一是可以用來輸出或顯示文本信息;二是可以接受從鍵盤輸入的信息。1.常用屬性(1)Text屬性該屬性用于設定文本框顯示的文本,可通過TextAlign屬性設置文本的對齊方式。(2)BackColor屬性用于設定文本框的背景色。(3)ForeColor屬性用于設定文本框中文本的顏色。772024/5/11C#程序設計實用教程

9.4.3文本框控件

(4)Font屬性用于設定文本框中文本的字體、大小、粗體、斜體、刪除線等。(5)PasswordChar屬性文本框控件以密碼輸入方式使用,輸入字母用該屬性指定字符屏蔽。(6)Enable屬性用于設定文本框控件是否可用,不可用,則用灰色表示。(7)Visible屬性用于設定文本框控件是否可見,不可見,則隱藏。(8)ReadOnly屬性用于設定文本框控件是否只讀。(9)MultiLine屬性用于設定文本框控件是否包多行文本。注意:上述的屬性中,前5項為外觀屬性;而后4項為行為屬性。782024/5/11C#程序設計實用教程

9.4.3文本框控件

2.常用的方法(1)Clear方法用于清除文本框中已有的文本。(2)AppendText方法用于文本框最后追加文本。792024/5/11C#程序設計實用教程

9.4.3文本框控件

3.常用的事件在文本框控件所能響應的事件中,TextChanged、Enter和Leave是常用的事件。(1)TextChanged事件當文本框的文本內容發(fā)生變化時,觸發(fā)該事件。當向文本框輸入信息時,每輸入一個字符,就會引發(fā)一次TextChanged事件。(2)Enter事件當文本框獲得焦點時,就會引發(fā)的事件。(3)Leave事件當文本框失去焦點時,就會引發(fā)的事件。802024/5/11C#程序設計實用教程

9.4.3文本框控件

【例9-9】文本框控件的運用。實現(xiàn)步驟如下:(1)為窗體Form1添加2個TextBox控件:tbInput和tbHint,前者可編輯單行文本,用來獲取用戶輸入;后者用于顯示數(shù)據(jù),應設置為只讀多行文本。同時,再添加1個Label控件lblCopy,用來顯示輸入文本框中數(shù)據(jù)。812024/5/11C#程序設計實用教程

9.4.3文本框控件

(2)在此例中,通過程序代碼設置相應的控件的屬性。主要程序代碼如下:privatevoidForm1_Load(objectsender,EventArgse){//設置2個文本框的屬性this.tbInput.ForeColor=Color.Blue;this.tbHint.BackColor=Color.White;this.tbHint.ForeColor=Color.Green;this.tbHint.ReadOnly=true;}822024/5/11C#程序設計實用教程

9.4.3文本框控件

privatevoidtbInput_Enter(objectsender,EventArgse){//光標進入清除原有文本this.tbInput.Clear();}

privatevoidtbInput_Leave(objectsender,EventArgse){//焦點退出,將文本添加到tbHint新的一行this.tbHint.AppendText(this.tbInput.Text+Environment.NewLine);}832024/5/11C#程序設計實用教程

9.4.3文本框控件

privatevoidtbInput_TextChanged(objectsender,EventArgse){//將當前tbInput中文本內容同步顯示到lblCopy中this.lblCopy.Text=this.tbInput.Text;}注意:在tbInput_Leave事件中將編輯好的文本通過方法TextBox.AppendText()追加tbHint中;在tbInput_TextChanged事件中將tbInput中最新的文本同步顯示到lbCopy控件上。程序運行結果如圖9-17所示。842024/5/11C#程序設計實用教程

9.4.4單選按鈕控件

單選按鈕(RadioButton)控件為用戶提供由兩個或多個互斥選項組成的選項集。當用戶選中某單選項按鈕時,同一組中的其他單選項按鈕不能同時選定,該控件以圓圈內加點的方式表示選中。單選按鈕用來讓用戶在一組相關的選項中選擇一項,因此單選按鈕控件總是成組出現(xiàn)。直接添加到一個窗體中的所有單選按鈕將形成一個組。若要添加不同的組,必須將它們放到面板或分組框中。將若干RadionButton控件放在一個GroupBox控件內組成一組時,當這一組中的某個單選按鈕控件被選中時,該組中的其他單選控件將自動處于不選中狀態(tài)。852024/5/11C#程序設計實用教程

9.4.4單選按鈕控件

1.常用屬性(1)Text屬性該屬性用于設置單選按鈕旁邊的說明文字,以說明單選按鈕的用途。(2)Check屬性表示單選按鈕是否被選中,選中則Checked值為True,否則為False。2.響應的事件單選按鈕響應的事件主要是Click事件和CheckedChanged事件。當鼠標單擊單選按鈕時,觸發(fā)Click事件,并且改變Checked屬性值。Checked屬性值的改變,同時將觸發(fā)CheckedChanged事件。862024/5/11C#程序設計實用教程

9.4.4單選按鈕控件

【例9-10】單選按鈕控件的運用。通過選擇不同的單選按鈕,實現(xiàn)在文本框中顯示不同水果的價格。實現(xiàn)步驟如下:(1)創(chuàng)建如圖9-18所示的窗體。872024/5/11C#程序設計實用教程

9.4.4單選按鈕控件

(2)設置窗體和各控件的屬性,如表9-3所示。882024/5/11C#程序設計實用教程

9.4.4單選按鈕控件

(3)打開代碼窗口,編寫事件過程。privatevoidrdoApple_CheckedChanged(objectsender,EventArgse){txtPrice.Text="10.0";}

privatevoidrdoBanana_CheckedChanged(objectsender,EventArgse){txtPrice.Text="8.5";}892024/5/11C#程序設計實用教程

9.4.4單選按鈕控件

privatevoidrdoPineapple_CheckedChanged(objectsender,EventArgse){txtPrice.Text="12.5";}902024/5/11C#程序設計實用教程

9.4.5復選框控件

復選按鈕(CheckBox)控件,它與單選按鈕一樣,也給用戶提供一組選項供其選擇。但它與單選按鈕有所不同,每個復選框都是一個單獨的選項,用戶既可以選擇它,也可以不選擇它,不存在互斥的問題,可以同時選擇多項。1.常用屬性(1)Text屬性。該屬性用于設置復選框旁邊的說明文字,以說明復選框的用途。(2)Check屬性。表示復選框是否被選擇。True表示復選框被選擇,F(xiàn)alse表示復選框未被選擇。912024/5/11C#程序設計實用教程

9.4.5復選框控件

(3)CheckState屬性。反映該復選框的狀態(tài),有3個可選值。Checked:表示復選框當前被選中。Unchecked:表示復選框當前未被選中。Indeterminate:表示復選框當前狀態(tài)未定,此時該復選框呈灰色。2.響應的事件復選框響應的事件主要是Click事件、CheckedChanged事件和CheckStateChanged事件。當鼠標單擊復選框時,觸發(fā)Click事件,并且改變Checked屬性值和CheckState屬性值。Checked屬性值的改變,同時將觸發(fā)CheckedChanged事件;CheckState屬性值的改變,同時將觸發(fā)CheckStateChanged事件。922024/5/11C#程序設計實用教程

9.4.5復選框控件

【例9-11】復選框控件的運用。通過選擇不同的復選框,實現(xiàn)輸出選中的業(yè)余愛好。實現(xiàn)步驟如下:(1)創(chuàng)建一個Windows窗體應用的程序,添加如圖9-19所示的控件。(2)編寫“確定”按鈕btnOk和“退出”btnExit的代碼。其中“確定”按鈕功能為顯示一個對話框,輸出用戶用戶所填內容;“退出”按鈕功能為結束程序。932024/5/11C#程序設計實用教程

9.4.5復選框控件

942024/5/11C#程序設計實用教程

9.4.5復選框控件

(3)程序的完整代碼如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;

namespaceUseCheckBox{publicpartialclassForm1:Form{

952024/5/11C#程序設計實用教程

9.4.5復選框控件

publicForm1(){InitializeComponent();}

//檢查用戶輸入的信息是否有效privatevoidtxtName_Validating(objectsender,CancelEventArgse){if(txtName.Text.Trim()==string.Empty){MessageBox.Show("姓名為空,請重新輸入!");txtName.Focus();}}962024/5/11C#程序設計實用教程

9.4.5復選框控件

privatevoidbtnExit_Click(objectsender,EventArgse){this.Close();}972024/5/11C#程序設計實用教程

9.4.5復選框控件

privatevoidbtnOk_Click(objectsender,EventArgse){stringstrUser=string.Empty;strUser="姓名:"+txtName.Text+"\n";strUser=strUser+"業(yè)余愛好:"+(chkMovie.Checked?"電影

":"")+(chkMusic.Checked?"音樂

":"")+(chkSport.Checked?"體育

":"")+"\n";DialogResultresult=MessageBox.Show(strUser,"信息確認",MessageBoxButtons.OKCancel,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1);if(result==DialogResult.OK){txtName.Clear();chkMovie.Checked=false;chkMusic.Checked=false;chkSport.Checked=false;}}

982024/5/11C#程序設計實用教程

9.4.5復選框控件

privatevoidbtnExit_MouseEnter(objectsender,EventArgse){txtName.CausesValidation=false;}

privatevoidbtnExit_MouseLeave(objectsender,EventArgse){txtName.CausesValidation=true;}}}992024/5/11C#程序設計實用教程

9.4.5復選框控件

單擊“信息確認”對話框中的“確定”按鈕,將會清除已輸入的內容,包括復選框的選中狀態(tài)。100程序運行,輸入相應的內容,如圖9-20所示。單擊“確定”按鈕后,彈出的對話框如圖9-21所示。2024/5/11C#程序設計實用教程

9.4.5復選框控件

說明:代碼中用到了MessageBox的另一個構造方法,這種方法使得MessageBox的外觀更加多樣化,包括了MessageBox的標題(Title)、圖標(MessageBoxIcons)的按鈕(MessageBoxButtons)。另外,程序中還編寫了btnExit的Enter和Leave事件,目的是為了在單擊“退出”按鈕時,不引發(fā)TextBox控件的Validating事件,防止多余的提示;在Leave事件中又恢復TextBox控件的Validating事件。讀者可以先刪除該段代碼,以查看相應的效果。1012024/5/11C#程序設計實用教程

9.4.6列表框

列表框(ListBox)控件提供一個項目列表,用戶可以從中選擇一項或多項。在列表框內的項目稱為列表框,列表項的加入是按一定的順序進行的,這個順序號稱為索引號。列表框內列表項的索引號是從0開始的,即第一個加入的列表項索引號為0,其余索引項的索引號依次類推。1022024/5/11C#程序設計實用教程

9.4.6列表框

1.常用屬性(1)Items屬性通過該屬性,設置或獲取列表框的項。用戶可以事先在屬性窗口中設置,也可以在程序中進行設置。(2)Multicolumn屬性用于設置列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論