第4章 Windows應(yīng)用程序開(kāi)發(fā)基礎(chǔ)_第1頁(yè)
第4章 Windows應(yīng)用程序開(kāi)發(fā)基礎(chǔ)_第2頁(yè)
第4章 Windows應(yīng)用程序開(kāi)發(fā)基礎(chǔ)_第3頁(yè)
第4章 Windows應(yīng)用程序開(kāi)發(fā)基礎(chǔ)_第4頁(yè)
第4章 Windows應(yīng)用程序開(kāi)發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩99頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章Windows應(yīng)用程序開(kāi)發(fā)基礎(chǔ)

4.1開(kāi)發(fā)步驟演示4.2窗體及其特性4.3Windows常用控件4.4對(duì)話(huà)框應(yīng)用4.5Windows文檔程序設(shè)計(jì)4.1開(kāi)發(fā)步驟演示【例4.1】設(shè)計(jì)一個(gè)加法器,要求是圖形界面的Windows程序。1.建立項(xiàng)目在VisualStudio2010開(kāi)發(fā)環(huán)境(以下簡(jiǎn)稱(chēng)VS2010)中單擊【文件】→【新建】→【項(xiàng)目】,彈出如圖4.1所示的“新建項(xiàng)目”對(duì)話(huà)框。4.1開(kāi)發(fā)步驟演示2.界面設(shè)計(jì)系統(tǒng)提供了一個(gè)默認(rèn)的窗體。通過(guò)工具箱向其中添加各種控件來(lái)設(shè)計(jì)應(yīng)用程序的界面。具體操作是:用鼠標(biāo)選擇工具箱中需要添加到窗體的控件,然后拖放到窗體中即可。這里,我們將窗體命名為“TestForm”(意在本例主要用于“測(cè)試窗體的性質(zhì)”),將它的Name屬性及Text屬性均改為T(mén)estForm。向窗體中添加2個(gè)Label控件、1個(gè)Button控件和3個(gè)TextBox控件,調(diào)整各個(gè)控件的大小和位置,完成一個(gè)簡(jiǎn)單的整數(shù)加法器界面的設(shè)計(jì)。4.1開(kāi)發(fā)步驟演示3.屬性設(shè)計(jì)首先,在窗體中選中控件。然后在屬性窗口中設(shè)置該控件相應(yīng)的屬性,如表4.1所示。設(shè)置好屬性的窗體效果如圖4.2所示。4.1開(kāi)發(fā)步驟演示4.代碼設(shè)計(jì)雙擊Button1按鈕,進(jìn)入代碼編輯器。編寫(xiě)代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){ if(textBox1.Text==string.Empty||textBox2.Text==string.Empty) { MessageBox.Show("輸入不完整!"); return; } inta=int.Parse(textBox1.Text); intb=int.Parse(textBox2.Text); intc=a+b; textBox3.Text=c.ToString();}4.1開(kāi)發(fā)步驟演示5.運(yùn)行調(diào)試單擊工具欄中的

按鈕或使用鍵盤(pán)上的F5快捷鍵,程序運(yùn)行結(jié)果如圖4.3所示。4.2窗體及其特性4.2.1窗體的外觀樣式窗體的外觀效果主要由FormBorderStyle屬性決定,如圖4.4所示,屬性下拉列表中共有7個(gè)可選項(xiàng)。4.2.1窗體的外觀樣式通過(guò)更改

FormBorderStyle

屬性值,可控制和調(diào)整窗體的外觀。當(dāng)設(shè)計(jì)Windows窗體的外觀時(shí),對(duì)應(yīng)FormBorderStyle值有7種邊框樣式可供選擇,相關(guān)樣式說(shuō)明如表4.2所示。4.2.1窗體的外觀樣式下面的圖4.5向讀者呈現(xiàn)了其中4種最具代表性的窗體邊框效果。4.2.2窗體可見(jiàn)性控制1.窗體可見(jiàn)性控制窗體的可見(jiàn)性通常由

Visible

屬性控制,如果在【例

4.1】程序的【計(jì)算】按鈕單擊事件過(guò)程中,添加如下語(yǔ)句:privatevoidbutton1_Click(objectsender,EventArgse){ …… this.Visible=false;}也可以使用窗體自身的方法,常用的控制窗體顯示和隱藏的方法如下:(1)Hide()方法。隱藏窗體,但不破壞窗體,也不釋放資源,可以使用Show()方法重新顯現(xiàn)。(2)Show()方法。顯示窗體??梢詫⑸厦嫣砑拥恼Z(yǔ)句改為:privatevoidbutton1_Click(objectsender,EventArgse){ …… this.Hide();}4.2.2窗體可見(jiàn)性控制若希望主窗體在應(yīng)用程序啟動(dòng)時(shí)就隱藏,讀者會(huì)發(fā)現(xiàn),使用這兩種方法都不可行。因?yàn)镃#默認(rèn)啟動(dòng)窗體的生存期決定應(yīng)用程序的生存期,即應(yīng)用程序生命的開(kāi)始也就是主窗體生命的開(kāi)始,如Program.cs中的代碼:usingSystem;……namespaceWindowsFormsDemo{staticclassProgram{///<summary>///應(yīng)用程序的主入口點(diǎn)///</summary>[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newTestForm());//應(yīng)用程序Application“孕育”了窗體TestForm}}}4.2.2窗體可見(jiàn)性控制要使主窗體從一開(kāi)始就隱藏,必須將應(yīng)用程序的啟動(dòng)邏輯移動(dòng)到單獨(dú)的類(lèi)中,將代碼作如下修改:……staticclassProgram{ ……staticvoidMain(){ ……Application.Run(); //應(yīng)用程序Application單獨(dú)啟動(dòng)}}4.2.2窗體可見(jiàn)性控制2.窗體透明度調(diào)節(jié)【例4.2】設(shè)計(jì)一個(gè)WinForm應(yīng)用程序,演示調(diào)節(jié)窗體的透明度。在項(xiàng)目

WindowsFormsDemo

中添加新窗體,方法是:右鍵單擊項(xiàng)目,在彈出的快捷菜單中選擇【添加】→【W(wǎng)indows窗體】,在【添加新項(xiàng)】對(duì)話(huà)框中單擊【添加】即可。從工具箱中拖曳2個(gè)Button控件到窗體上,設(shè)置窗體和控件的屬性如表4.3所示。4.2.2窗體可見(jiàn)性控制表

4.3

中窗體與控件的名稱(chēng)是指它們的

Name

屬性值,在窗體設(shè)計(jì)器中分別雙擊兩個(gè)按鈕,在代碼編輯窗口中添加代碼,代碼如下所示:privatevoidBtnAdd_Click(objectsender,EventArgse){this.Opacity+=0.1;}privatevoidBtnSub_Click(objectsender,EventArgse){if(this.Opacity>0.2){this.Opacity-=0.1;}else{this.Opacity=1;}}4.2.2窗體可見(jiàn)性控制由于這是本項(xiàng)目的第二個(gè)窗體,運(yùn)行程序必須選擇它為啟動(dòng)窗體。在“解決方案資源管理器”中打開(kāi)Program.cs文件,在Main方法中將Application“孕育”的窗體TestForm修改為FormOpacity即可,代碼如下:……[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);

//Application.Run(newTestForm());Application.Run(newFormOpacity());}4.2.2窗體可見(jiàn)性控制啟動(dòng)程序,調(diào)節(jié)窗體透明度前后如圖4.6和圖4.7所示。

4.2.3窗體的定位1.初始位置的設(shè)定窗體的初始位置通過(guò)

StartPosition

屬性來(lái)指定,如圖

4.8

所示,Windows

應(yīng)用程序的StartPosition

屬性默認(rèn)為“WindowsDefaultLocation”,該設(shè)置通知操作系統(tǒng)在啟動(dòng)時(shí)根據(jù)當(dāng)前屏幕分辨率計(jì)算該窗體的最佳位置。4.2.3窗體的定位StartPosition屬性各選項(xiàng)的含義見(jiàn)表4.4。4.2.3窗體的定位2.以編程方式定位窗體Location屬性可支持任意動(dòng)態(tài)地指定窗體在計(jì)算機(jī)屏幕上的顯示位置,它以像素為單位指定窗體左上角的位置,在窗體的

StartPosition

屬性被置為Manual的前提下,就可以為L(zhǎng)ocation屬性輸入值(以逗號(hào)分隔)來(lái)定位窗體,其中第1個(gè)數(shù)字(X)是指窗體到顯示區(qū)域左邊界的距離(像素),第

2

個(gè)數(shù)字(Y)是指窗體到顯示區(qū)域上邊界的距離(像素),展開(kāi)Location屬性,分別輸入X和Y子屬性值,如圖4.9所示。4.2.3窗體的定位Location屬性的這些特點(diǎn),使它非常適用于在編程時(shí)定位窗體。編寫(xiě)程序時(shí),可以將窗體的Location屬性設(shè)置為Point來(lái)定義窗體的位置,例如:this.Location=newPoint(100,100);或使用Left子屬性(用于X坐標(biāo))和Top子屬性(用于Y坐標(biāo))更改窗體位置的X坐標(biāo)和Y坐標(biāo)。例如,將窗體的X坐標(biāo)調(diào)整為300個(gè)像素點(diǎn):this.Left=300;4.2.3窗體的定位3.使窗口始終位于最前要使窗體成為

Windows應(yīng)用程序中最頂端的窗體,只要在屬性窗口中將

TopMost屬性設(shè)置為

true即可,或者在程序代碼中將TopMost屬性設(shè)置為true,代碼如下:this.TopMost=true;4.3Windows常用控件4.3.1認(rèn)識(shí)控件大家族1.家族譜系C#中的很多對(duì)象被進(jìn)一步封裝,成為類(lèi)似工業(yè)產(chǎn)品零件的部件,稱(chēng)之為“組件”,所以C#也是面向組件的新型程序語(yǔ)言。Control(控件)類(lèi)是“可視化組件”的基類(lèi),它形成了圖形化用戶(hù)界面的基礎(chǔ),屬于System.Windows.Forms命名空間,如圖4.10所示。4.3.1認(rèn)識(shí)控件大家族2.常用控件圖4.11是將要制作的“學(xué)生信息管理系統(tǒng)”表單界面的設(shè)計(jì)效果。4.3.1認(rèn)識(shí)控件大家族各控件的名稱(chēng)及其在工具箱里的圖標(biāo),列于表4.5中。4.3.1認(rèn)識(shí)控件大家族3.控件屬性和事件(1)屬性大多數(shù)控件屬性都派生于

System.Windows.Forms.Control

類(lèi),所以它們都有一些共同的屬性,如表4.6所示。4.3.1認(rèn)識(shí)控件大家族(2)事件控件對(duì)用戶(hù)或應(yīng)用程序的某些行為作出響應(yīng),這些行為稱(chēng)為事件。Control類(lèi)的常見(jiàn)事件如表4.7所示。4.3.2標(biāo)簽控件【例4.3】使用

Label和

LinkLabel控件制作“學(xué)生信息管理系統(tǒng)”的歡迎界面。在項(xiàng)目

StudentMIS

中新建窗體,命名為

Welcome,從工具箱中拖曳

2

個(gè)

Label

1

個(gè)LinkLabel控件到窗體上。設(shè)置各控件的屬性,如表4.8(文本的字體及顏色可自選,不再詳細(xì)列出,下同)所示。4.3.2標(biāo)簽控件在LinkClicked

事件處理程序中,調(diào)用

Show

方法以打開(kāi)登錄窗體

loginForm,并隱藏自身,同時(shí)將LinkVisited屬性設(shè)置為true,代碼如下:usingSystem;……namespaceStudentMIS{publicpartialclassWelcome:Form{publicstaticLoginloginForm;publicstaticUpdateupdateForm;publicstaticBrowserbrowserForm;publicWelcome(){InitializeComponent();loginForm=newLogin();updateForm=newUpdate();}privatevoidlinkLabel1_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){linkLabel1.LinkVisited=true;loginForm.Show();this.Hide();}}}

4.3.2標(biāo)簽控件系統(tǒng)啟動(dòng)畫(huà)面如圖4.12所示。4.3.3按鈕與文本框1.按鈕控件在設(shè)計(jì)器中指定“接受”按鈕的方法是:選擇按鈕所駐留的窗體,在“屬性”窗口中將窗體的AcceptButton屬性設(shè)置為按鈕控件的名稱(chēng),如圖4.13所示。也可以用編程方式指定“接受”按鈕,在代碼中將窗體的

AcceptButton

屬性設(shè)置為指定的按鈕控件,代碼如下:this.AcceptButton=myDefaultBtn;4.3.3按鈕與文本框在設(shè)計(jì)器中指定“取消”按鈕的方法是:選擇按鈕所駐留的窗體后,在“屬性”窗口中將窗體的

CancelButton

屬性設(shè)置為按鈕控件的名稱(chēng)。也可以用編程方式指定“取消”按鈕,將窗體的

CancelButton

屬性設(shè)置為指定的按鈕控件,代碼如下:this.CancelButton=myCancelBtn;4.3.3按鈕與文本框2.文本框控件(1)控制TextBox控件中字符的插入點(diǎn)將

SelectionStart

屬性設(shè)置為適當(dāng)值可控制字符的插入點(diǎn),如值為零,則插入點(diǎn)緊挨文本框中第一個(gè)字符的左邊。將

SelectionLength

屬性設(shè)置為要選擇的文本的長(zhǎng)度。下面的代碼表示總是將插入點(diǎn)返回到0。當(dāng)然必須將textBox1_Enter事件處理程序綁定到該控件。privatevoidtextBox1_Enter(Objectsender,System.EventArgse){textBox1.SelectionStart=0;textBox1.SelectionLength=0;}4.3.3按鈕與文本框(2)創(chuàng)建密碼文本框密碼框是一種

Windows

窗體文本框,它在用戶(hù)輸入字符串時(shí)顯示占位符。將

TextBox

控件的

PasswordChar

屬性設(shè)置為某個(gè)特定字符,例如,如果希望在密碼框中顯示星號(hào),則在“屬性”窗口中將PasswordChar屬性指定為“*”。程序運(yùn)行時(shí),無(wú)論用戶(hù)在文本框中輸入什么字符,都顯示為“*”。4.3.3按鈕與文本框(3)以編程方式選擇文本下面的代碼將在控件的

Enter

事件發(fā)生時(shí)選擇文本框的內(nèi)容。將

textBox1_Enter

事件處理程序綁定到控件,代碼如下:privatevoidtextBox1_Enter(objectsender,System.EventArgse){textBox1.SelectionStart=0;textBox1.SelectionLength=textBox1.Text.Length;}TextBox控件還提供了一些方法,以方便用戶(hù)使用,如表4.9所示。4.3.3按鈕與文本框【例4.4】創(chuàng)建“學(xué)生信息管理系統(tǒng)”的登錄界面,并驗(yàn)證登錄,用戶(hù)名和密碼均為admin,如圖4.14所示。按照?qǐng)D4.14創(chuàng)建窗體和控件,各控件名稱(chēng)如表4.10所示。4.3.3按鈕與文本框分別雙擊myDefaultBtn控件和myCancelBtn控件,輸入以下代碼:privatevoidmyDefaultBtn_Click(objectsender,EventArgse){if(tbxUsr.Text==string.Empty||tbxPwd.Text==string.Empty){MessageBox.Show("信息不完整!","提示");return;}if(!tbxUsr.Text.Equals("admin")||!tbxPwd.Text.Equals("admin")){MessageBox.Show("用戶(hù)名或密碼不正確!","提示");}else{Welcome.updateForm.Show();this.Close();}}privatevoidmyCancelBtn_Click(objectsender,EventArgse){tbxUsr.Clear();tbxPwd.Clear();}4.3.4圖片框Windows

窗體中的PictureBox控件用于顯示位圖、GIF、JPEG、圖元文件或圖標(biāo)格式的圖片。顯示的圖片由

Image

屬性確定,SizeMode

屬性控制圖像和控件彼此適合的方式。可顯示的圖片文件類(lèi)型如表4.11所示。4.3.4圖片框1.在設(shè)計(jì)時(shí)設(shè)置顯示圖片在窗體上繪制

PictureBox

控件。在“屬性”窗口選擇

Image

屬性,單擊

按鈕顯示【選擇資源】對(duì)話(huà)框,如圖

4.15

所示,單擊【導(dǎo)入(I)…】按鈕,在彈出的【打開(kāi)】對(duì)話(huà)框中選擇要顯示的圖片文件即可。4.3.4圖片框PictureBox

控件通過(guò)SizeMode

屬性選擇如表4.12所列的5種顯示方式之一。4.3.4圖片框2.編程載入圖片【例4.5】編寫(xiě)程序,在圖4.11的“學(xué)生信息管理系統(tǒng)”表單界面上的圖片框(⑥)里顯示一張照片。將一張照片“證件照.gif”放到“D:\MyDocuments\”目錄下,在【修改學(xué)生信息】窗體(Update類(lèi))的構(gòu)造方法中輸入如下代碼:usingSystem;……namespaceStudentMIS{publicpartialclassUpdate:Form{

publicstaticstringpath;publicstaticstringinfo;publicUpdate(){InitializeComponent();path=@"D:\MyDocuments\證件照.gif";pictureBox1.Image=Image.FromFile(path);} ……}}4.3.4圖片框在【預(yù)覽】窗體(Browser類(lèi))的構(gòu)造方法中添加如下代碼:usingSystem;……namespaceStudentMIS{publicpartialclassBrowser:Form{publicBrowser(){InitializeComponent();pictureBox1.Image=Image.FromFile(StudentMIS.Update.path);rtbxStudentInfo.Text=StudentMIS.U;} ……}}4.3.4圖片框運(yùn)行程序,如圖4.16所示,界面上顯示出照片。4.3.5選擇控件及分組1.GroupBox控件本項(xiàng)目中“性別”框?qū)ⅰ澳小?、“女”兩個(gè)RadioButton

控件進(jìn)行組合,而“愛(ài)好”框則把包含諸多愛(ài)好項(xiàng)的

CheckBox

控件組織成為一個(gè)整體,如圖

4.17所示。4.3.5選擇控件及分組2.RadioButton控件【例4.6】RadioButton的使用方法。由于

RadioButton

被布局在“性別”分組框里,最簡(jiǎn)單的做法是使用foreach語(yǔ)句遍歷組內(nèi)控件。在圖4.11中雙擊【提交】按鈕,編寫(xiě)事件過(guò)程代碼:privatevoidmySubmitBtn_Click(objectsender,EventArgse){info="學(xué)號(hào):"+tbxId.Text+"\r\n";info+="姓名:"+tbxName.Text+"\r\n";foreach(ControlcontrolingbxSex.Controls){if((controlasRadioButton).Checked){info+="性別:"+(controlasRadioButton).Text;}} ……Welcome.browserForm=newBrowser();Welcome.browserForm.Show();this.Opacity=0;}4.3.5選擇控件及分組程序運(yùn)行結(jié)果如圖4.18所示。4.3.5選擇控件及分組3.CheckBox控件【例4.7】CheckBox的使用方法。在【提交】按鈕的Click事件處理程序中,添加以下代碼:info+="\r\n愛(ài)好:";foreach(ControlcontrolingbxFavor.Controls){ if((controlasCheckBox).Checked) { info+=(controlasCheckBox).Text+""; }}4.3.5選擇控件及分組上段代碼也是使用

Checked

屬性確定控件的狀態(tài),以執(zhí)行必要的操作。程序運(yùn)行結(jié)果如圖4.19所示。4.3.6列表類(lèi)控件1.DateTimePicker控件DateTimePicker控件可以讓用戶(hù)從日歷中選擇單個(gè)項(xiàng),用來(lái)表示日期。日歷的顯示分為兩部分:下拉列表和網(wǎng)格,如圖4.20所示。4.3.6列表類(lèi)控件DateTimePicker功能較多,比較復(fù)雜,但下面3個(gè)屬性是最常用的:

dateTimerPicker1.Value

獲取所選擇的日期/時(shí)間。

dateTimerPicker1.Text

獲取控件顯示的“××××年×月×日”。

dateTimerPicker1.Value.Date獲取當(dāng)前控件被選取的短日期。4.3.6列表類(lèi)控件2.ComboBox控件默認(rèn)情況下,ComboBox

控件分兩部分顯示:頂部是一個(gè)允許用戶(hù)輸入列表項(xiàng)的文本框;第二個(gè)部分是列表框,它顯示用戶(hù)可以選擇的項(xiàng)。DropDownStyle屬性決定ComboBox的樣式及行為方式,圖4.21給出了三種不同的樣式。4.3.6列表類(lèi)控件【例4.8】DateTimePicker和ComboBox控件的使用方法。在【提交】按鈕的Click事件處理程序中,添加以下兩行代碼:info+="\r\n出生日期:"+dateTimePicker1.Text;info+="\r\n專(zhuān)

業(yè):"+comboBox1.Text;程序運(yùn)行結(jié)果如圖4.22所示。4.3.6列表類(lèi)控件3.ListBox控件ListBox控件中的屬性設(shè)置如下所示:(1)MultiColumn

屬性設(shè)置為

true

時(shí),列表框以多列形式顯示,并且會(huì)出現(xiàn)一個(gè)水平滾動(dòng)條。當(dāng)MultiColumn

屬性設(shè)置為

false

時(shí),列表框以單列形式顯示,并且會(huì)出現(xiàn)一個(gè)垂直滾動(dòng)條。(2)ScrollAlwaysVisible屬性設(shè)置為true時(shí),無(wú)論項(xiàng)數(shù)多少都將顯示滾動(dòng)條。(3)SelectionMode屬性指定一次可以選擇多少列表項(xiàng)。(4)SelectedIndex

屬性返回對(duì)應(yīng)于列表框中第一個(gè)選定項(xiàng)的整數(shù)值。(5)SelectedItem

屬性類(lèi)似于

SelectedIndex

屬性,但它返回選定項(xiàng)本身,通常是字符串值。(6)Items.Count

屬性反映列表中的項(xiàng)數(shù),且其值總比

SelectedIndex

的最大可能值大

1,因?yàn)镾electedIndex是從零開(kāi)始的。4.3.6列表類(lèi)控件【例4.9】在圖4.11的“學(xué)生信息管理系統(tǒng)”表單界面ListBox控件(⑧)中添加獎(jiǎng)懲情況說(shuō)明。要求雙擊ListBox控件時(shí)進(jìn)行添加,添加完畢后使第二項(xiàng)內(nèi)容選中,并顯示已添加的項(xiàng)數(shù)。獎(jiǎng)懲情況在窗體上是用

ListBox

控件實(shí)現(xiàn)的,因此只要正確調(diào)用

ListBox

的相關(guān)方法即可。在ListBox的

DoubleClick事件中添加如下代碼:privatevoidlistBox1_DoubleClick(objectsender,EventArgse){//首先清除所有現(xiàn)有項(xiàng)listBox1.Items.Clear();//用Add方法插入新項(xiàng)listBox1.Items.Add("2012年度校優(yōu)秀團(tuán)員");listBox1.Items.Add("2012年度一等獎(jiǎng)學(xué)金");//用Insert方法插入新項(xiàng)listBox1.Items.Insert(2,"2012年度校運(yùn)動(dòng)會(huì)1000米游泳冠軍");//使第二項(xiàng)選中l(wèi)istBox1.SelectedIndex=1;//獲得添加的記錄數(shù)stringmsg=string.Format("已添加獎(jiǎng)懲記錄{0}條",listBox1.Items.Count);MessageBox.Show(msg,"提示");}4.3.6列表類(lèi)控件程序運(yùn)行結(jié)果如圖4.23所示。4.3.7狀態(tài)顯示控件1.StatusStrip控件將工具箱中的

StatusStrip

圖標(biāo)(參見(jiàn)表

4.5?)拖曳到窗體設(shè)計(jì)區(qū),設(shè)計(jì)區(qū)下方會(huì)立刻出現(xiàn)如圖

4.24

所示的組件欄,顯示該控件的圖標(biāo)(圖中小橢圓圈出),窗體界面上出現(xiàn)設(shè)置條。4.3.7狀態(tài)顯示控件向StatusStrip中添加新項(xiàng)有兩種方法:(1)直接添加這是最簡(jiǎn)單的方法,如圖4.24中大橢圓圈出的部分,直接單擊設(shè)置條,在下拉列表中選擇要添加的項(xiàng)。StatusStrip是一個(gè)容器,能容納以下4種子項(xiàng)(伴生類(lèi)控件):StatusLabel——表示StatusStrip控件上的一個(gè)狀態(tài)標(biāo)簽,其功能類(lèi)似于普通的標(biāo)簽(Label),但它專(zhuān)用于顯示狀態(tài)欄文本信息。ProgressBar——表示一個(gè)進(jìn)度條控件,顯示進(jìn)程的完成狀態(tài)。DropDownButton——顯示用戶(hù)可以從中選擇單個(gè)項(xiàng)的關(guān)聯(lián)

ToolStripDropDown。SplitButton——表示作為標(biāo)準(zhǔn)按鈕和下拉菜單的一個(gè)分隔控件。4.3.7狀態(tài)顯示控件(2)通過(guò)項(xiàng)集合編輯器添加StatusStrip

控件內(nèi)的可編程區(qū)域包含在其

Item

屬性集合中,在“屬性”窗口中,單擊

item屬性右邊的

按鈕,打開(kāi)“項(xiàng)集合編輯器”窗口,如圖4.25所示。4.3.7狀態(tài)顯示控件2.ProgressBar控件ProgressBar(進(jìn)度條)控件用來(lái)表示進(jìn)度,它一般作為StatusStrip控件的伴生類(lèi)出現(xiàn),也可以單獨(dú)使用。3.Timer控件(1)Enabled屬性。指定定時(shí)器是否處于運(yùn)行狀態(tài),默認(rèn)值為false,其值為true時(shí),表示可以觸發(fā)事件。(2)InterVal屬性。指定定時(shí)器控件觸發(fā)的時(shí)間間隔,單位為毫秒。4.3.7狀態(tài)顯示控件【例4.10】綜合應(yīng)用StatusStrip、ProgressBar和Timer控件,在“學(xué)生信息管理系統(tǒng)”窗口底部實(shí)時(shí)地顯示系統(tǒng)當(dāng)前時(shí)間。參照?qǐng)D

4.24

設(shè)計(jì)狀態(tài)欄外觀,從工具箱拖曳一個(gè)

Timer

控件到窗體。編寫(xiě)定時(shí)器的

Tick事件,代碼如下:privatevoidtimer1_Tick(objectsender,EventArgse){toolStripStatusLabelNowTime.Text=string.Format("現(xiàn)在時(shí)間:{0}" ,DateTime.Now.ToLongTimeString());toolStripProgressBar1.PerformStep();if(toolStripProgressBar1.Value==toolStripProgressBar1.Maximum){toolStripProgressBar1.Value=toolStripProgressBar1.Minimum;}}4.3.7狀態(tài)顯示控件運(yùn)行程序,結(jié)果如圖4.26所示。4.4對(duì)話(huà)框應(yīng)用4.4.1消息框.NET

框架使用

MessageBox

類(lèi)來(lái)封裝消息對(duì)話(huà)框,調(diào)用其靜態(tài)成員方法Show()進(jìn)行顯示,如下代碼彈出的對(duì)話(huà)框如圖4.27所示。MessageBox.Show("用戶(hù)名或密碼不正確!");4.4.1消息框“默認(rèn)按鈕”是指在消息對(duì)話(huà)框中一開(kāi)始具有輸入焦點(diǎn)的按鈕,在按鈕周?chē)幸粋€(gè)黑色虛框,這樣,用戶(hù)可直接通過(guò)單擊Enter鍵來(lái)選擇該按鈕。如下代碼彈出的對(duì)話(huà)框如圖

4.28所示。MessageBox.Show("用戶(hù)名或密碼不正確,要重新輸入嗎?","提示",MessageBoxButtons.OKCancel ,MessageBoxIcon.Information);4.4.1消息框MessageBoxButton、MessageBoxIcon和MessageBoxDefaultButton參數(shù)的枚舉值如表4.13所示。4.4.2模式對(duì)話(huà)框要把一個(gè)窗體作為模式對(duì)話(huà)框使用,調(diào)用

Form

類(lèi)的

ShowDialog()方法即可。ShowDialog()方法返回一個(gè)DialogResult

值,通知用戶(hù)對(duì)話(huà)框中的哪個(gè)按鈕被單擊。DialogResult是一個(gè)枚舉類(lèi)型,表

4.14給出了它的成員及其描述。通過(guò)給窗體的

DialogResult

屬性賦一個(gè)合適的值,就可以設(shè)置對(duì)話(huà)框的返回值,如下所示:this.DialogResult=DialogResult.Yes;4.4.3通用對(duì)話(huà)框通用對(duì)話(huà)框用

CommDialog類(lèi)表示(注意,它不是Form類(lèi)的子類(lèi)),該類(lèi)有7個(gè)子類(lèi),如表4.15所示。4.4.3通用對(duì)話(huà)框1.文件對(duì)話(huà)框OpenFileDialog

和SaveFileDialog類(lèi)派生自FileDialog抽象基類(lèi),該基類(lèi)提供了對(duì)于打開(kāi)/關(guān)閉文件對(duì)話(huà)框來(lái)說(shuō)都相同的文件功能。(1)OpenFileDialog類(lèi)是一個(gè)選擇文件的組件,如圖4.29所示。4.4.3通用對(duì)話(huà)框OpenFileDialog

組件常用屬性、方法和事件及說(shuō)明如表4.16所示。4.4.3通用對(duì)話(huà)框(2)SaveFileDialog

組件顯示一個(gè)預(yù)先配置的對(duì)話(huà)框,在工具箱中的圖標(biāo)為

。用戶(hù)可以使用該對(duì)話(huà)框?qū)⑽募4娴街付ǖ奈恢茫鐖D4.30所示。4.4.3通用對(duì)話(huà)框SaveFileDialog組件繼承了

OpenFileDialog

組件的大部分屬性、方法和事件,其說(shuō)明如表4.17所示。4.4.3通用對(duì)話(huà)框2.字體對(duì)話(huà)框字體對(duì)話(huà)框(FontDialog)用于設(shè)置操作系統(tǒng)中當(dāng)前安裝的字體,如圖4.31所示。4.4.3通用對(duì)話(huà)框字體對(duì)話(huà)框顯示字體、字體樣式和字體大小的列表框、刪除線(xiàn)和下劃線(xiàn)等效果的復(fù)選框、字符集的下拉列表以及字體外觀等選項(xiàng),在工具箱中的圖標(biāo)為

。字體對(duì)話(huà)框的常用屬性、方法和事件及說(shuō)明如表4.18所示。4.4.3通用對(duì)話(huà)框3.顏色對(duì)話(huà)框顏色對(duì)話(huà)框(ColorDialog)用于選擇顏色,允許用戶(hù)從調(diào)色板選擇顏色或自定義顏色,如圖4.32所示。4.4.3通用對(duì)話(huà)框ColorDialog

組件在工具箱中的圖標(biāo)為

,其常用屬性、方法和事件及說(shuō)明如表

4.19所示。4.4.4應(yīng)用舉例【例4.11】修改“學(xué)生信息管理系統(tǒng)”,運(yùn)用

OpenFileDialog對(duì)話(huà)框?qū)崿F(xiàn)運(yùn)行時(shí)由用戶(hù)自主選擇加載學(xué)生照片的功能。原來(lái)系統(tǒng)的學(xué)生照片是在編程時(shí)就指定存放路徑的,現(xiàn)在改為運(yùn)行時(shí)用戶(hù)自選照片,故要將Update類(lèi)構(gòu)造方法中原來(lái)用于預(yù)加載照片的兩句注釋掉,代碼如下:usingSystem;……namespaceStudentMIS{publicpartialclassUpdate:Form{publicstaticstringpath;publicstaticstringinfo;publicUpdate(){InitializeComponent();//path=@"D:\MyDocuments\證件照.gif"; //注釋掉//pictureBox1.Image=Image.FromFile(path); //注釋掉} ……}}4.4.4應(yīng)用舉例將照片框里的【瀏覽…】按鈕命名為myOpenPictureBtn,為其編寫(xiě)事件過(guò)程如下:privatevoidmyOpenPictureBtn_Click(objectsender,EventArgse){//設(shè)置文件對(duì)話(huà)框顯示的初始目錄this.openFileDialog1.InitialDirectory=@"D:\MyDocuments\MyPictures";//設(shè)置當(dāng)前選定篩選器字符串以決定對(duì)話(huà)框中"文檔類(lèi)型"選項(xiàng)this.openFileDialog1.Filter="bmp文件(*.bmp)|*.bmp|gif文件(*.gif)|*.gif|jpeg文件(*.jpg)|*.jpg";//設(shè)置對(duì)話(huà)框中當(dāng)前選定篩選器的索引this.openFileDialog1.FilterIndex=3;//關(guān)閉對(duì)話(huà)框,還原當(dāng)前的目錄this.openFileDialog1.RestoreDirectory=true;//設(shè)置對(duì)話(huà)框的標(biāo)題this.openFileDialog1.Title="選擇學(xué)生照片";if(this.openFileDialog1.ShowDialog()==DialogResult.OK){path=this.openFileDialog1.FileName; //獲取文件路徑}pictureBox1.Image=Image.FromFile(path); //加載照片}4.4.4應(yīng)用舉例運(yùn)行程序,在學(xué)生表單界面上單擊照片框【瀏覽…】按鈕,彈出“選擇學(xué)生照片”對(duì)話(huà)框,如圖4.33所示,用戶(hù)選擇照片后,照片被載入相框。4.5Windows文檔程序設(shè)計(jì)4.5.1菜單設(shè)計(jì)1.在設(shè)計(jì)時(shí)創(chuàng)建菜單在

Windows

窗體設(shè)計(jì)器中打開(kāi)需要菜單的窗體,雙擊工具箱中的

MenuStrip

組件,即向窗體頂部添加了一個(gè)菜單,并且MenuStrip組件也添加到了組件欄,如圖4.34所示。4.5.1菜單設(shè)計(jì)用這樣的方法創(chuàng)建【文件】、【編輯】?jī)蓚€(gè)頂級(jí)菜單,然后依次在頂級(jí)菜單【文件】下創(chuàng)建三個(gè)子菜單,分別設(shè)置為【新建(N)】、【打開(kāi)(O)】和【退出(E)】。最終設(shè)計(jì)效果如圖4.35所示。4.5.1菜單設(shè)計(jì)2.以編程方式創(chuàng)建菜單首先,創(chuàng)建一個(gè)MenuStrip對(duì)象:MenuStripmenu=newMenuStrip();菜單中的每一個(gè)菜單項(xiàng)都是一個(gè)

ToolStripMenuItem

對(duì)象,因此要確定創(chuàng)建哪些頂級(jí)菜單項(xiàng),這里我們創(chuàng)建【文件】和【編輯】?jī)蓚€(gè)頂級(jí)菜單。ToolStripMenuItemitem1=newToolStripMenuItem("文件(&F)");ToolStripMenuItemitem2=newToolStripMenuItem("編輯(&E)");接著,使用MenuStrip的Items集合的AddRange方法一次性將頂級(jí)菜單加入到MenuStrip中。此方法要求用一個(gè)ToolStripItem數(shù)組作為傳入?yún)?shù):menu.Items.AddRange(newToolStripItem[]{item1,item2});4.5.1菜單設(shè)計(jì)繼續(xù)創(chuàng)建三個(gè)ToolStripMenuItem對(duì)象,作為頂級(jí)菜單【文件】的下拉子菜單:ToolStripMenuItemitem3=newToolStripMenuItem("新建(&N)");ToolStripMenuItemitem4=newToolStripMenuItem("打開(kāi)(&O)");ToolStripMenuItemitem5=newToolStripMenuItem("退出(&E)");將創(chuàng)建好的三個(gè)下拉菜單項(xiàng)添加到頂級(jí)菜單下。注意,這里不再調(diào)用

Items

屬性的AddRange方法,而是調(diào)用頂級(jí)菜單的DropDownItems屬性的AddRange方法:item1.DropDownItems.AddRange(newToolStripItem[]{item3,item4,item5});最后,將創(chuàng)建好的菜單對(duì)象添加到窗體的控件集合中:this.Controls.Add(menu);4.5.1菜單設(shè)計(jì)3.禁用和刪除菜單項(xiàng)禁用菜單項(xiàng)只需要將菜單項(xiàng)的

Enabled

屬性設(shè)置為

false

即可。以上面創(chuàng)建的【打開(kāi)】菜單為例,禁用該菜單項(xiàng)的代碼如下:item4.Enabled=false;刪除菜單項(xiàng)就是將該菜單項(xiàng)從相應(yīng)

MenuStrip

Items

集合中刪除。4.5.1菜單設(shè)計(jì)4.上下文菜單如圖4.36所示的是Word程序中的上下文菜單。4.5.1菜單設(shè)計(jì)選中ContextMenu控件,窗體的菜單欄部位會(huì)出現(xiàn)一個(gè)名為“ContextMenuStrip”的可視化菜單編輯器,如圖4.37所示,通過(guò)該編輯器就可以用與設(shè)計(jì)主菜單中的子菜單相同的方法來(lái)設(shè)計(jì)上下文菜單。4.5.2單文檔界面(SDI)【例4.12】綜合運(yùn)用各種菜單設(shè)計(jì)技術(shù),仿制一個(gè)Windows系統(tǒng)記事本程序。(1)添加控件新建

WinForm

項(xiàng)目,命名為“Notepad”。從工具箱中拖曳“MenuStrip”、“ContextMenuStrip”、“TextBox”和“StatusStrip”控件到窗體中。設(shè)置窗體和文本框控件的屬性,如表4.20所示。4.5.2單文檔界面(SDI)(2)其他控件設(shè)置①menuStrip1屬性設(shè)置。按照如圖4.38中(a)、(b)、(c)、(d)、(e)所示分別添加主菜單及其子菜單項(xiàng)。4.5.2單文檔界面(SDI)打開(kāi)【文件】菜單中的子菜單項(xiàng)【新建】的屬性窗口,設(shè)置與菜單項(xiàng)關(guān)聯(lián)的快捷鍵“ShortcutKeys”屬性,如圖4.39所示。其他子菜單的快捷鍵設(shè)置與此類(lèi)似。4.5.2單文檔界面(SDI)②statusStrip1屬性設(shè)置。單擊

圖標(biāo),在下拉列表中選中“StatusLabel”選項(xiàng),如圖4.40所示,打開(kāi)所添加的“toolStripStatusLabel1”屬性窗口,將“Text”屬性值設(shè)為空。③contextMenuStrip1屬性設(shè)置。選中“contextMenuStrip1”,在“請(qǐng)?jiān)诖颂庢I入”處輸入“撤銷(xiāo)(&U)”,添加【撤銷(xiāo)】菜單項(xiàng),用同樣的方法添加其他快捷菜單項(xiàng),如圖4.41所示。

4.5.2單文檔界面(SDI)(3)添加代碼在窗體設(shè)計(jì)器中分別雙擊菜單欄中的【撤銷(xiāo)】、【剪切】、【復(fù)制】、【粘貼】、【刪除】菜單按鈕,在事件窗口中為上下文菜單添加事件過(guò)程代碼:privatevoid撤銷(xiāo)UToolStripMenuItem_Click(objectsender,EventArgse){textBox1.Undo();}privatevoid剪切TToolStripMenuItem_Click(objectsender,EventArgse){textBox1.Cut();}privatevoid復(fù)制CToolStripMenuItem_Click(objectsender,EventArgse){textBox1.Copy();}privatevoid粘貼PToolStripMenuItem_Click(objectsender,EventArgse){textBox1.Paste();}privatevoid刪除LToolStripMenuItem_Click(objectsender,EventArgse){textBox1.SelectedText="";}4.5.2單文檔界面(SDI)添加文本框textBox1的“TextChanged”事件,在代碼編輯窗口中添加如下代碼privatevoidtextBox1_TextChanged(objectsender,EventArgse) //顯示行數(shù)與列數(shù){stringstr=textBox1.Text;intm=textBox1.SelectionStart;intLn=0;intCol=0;for(inti=m-1;i>=0;i--){if(str[i]=='\n'){Ln++;}if(Ln<1){Col++;}}Ln=Ln+1;Col=Col+1;toolStripStatusLabel1.Text="行:"+Ln.ToString()+","+"列:"+Col.ToString();}4.5.2單文檔界面(SDI)(4)運(yùn)行程序運(yùn)行程序,輸入文字,如圖4.42所示。至此,一個(gè)與Windows系統(tǒng)記事本程序相仿的程序就制作完成了。4.5.3多文檔界面(MDI)1.創(chuàng)建MDI父窗體將MenuStrip組件從工具箱拖拽至窗體中,創(chuàng)建一個(gè)Text屬性為“文件(&F)”的頂級(jí)菜單,該菜單帶有“新建(N)”和“關(guān)閉(C)”兩個(gè)子菜單項(xiàng)。再創(chuàng)建一個(gè)名為“窗口(W)”的頂級(jí)菜單。第

1

個(gè)菜單將在運(yùn)行時(shí)創(chuàng)建并隱藏菜單項(xiàng),而第

2

個(gè)菜單將跟蹤打開(kāi)MDI子窗口。此時(shí),已創(chuàng)建了一個(gè)

MDI

父窗體,運(yùn)行效果如圖4.43所示。4.5.3多文檔界面(MDI)2.創(chuàng)建MDI子窗體(1)在項(xiàng)目中添加一個(gè)如圖4.44所示的窗體,作為子窗體。拖曳一個(gè)RichTextBox控件至該窗體中,在“屬性”窗口中,將Anchor屬性設(shè)置為“Top,Left”,并將Dock屬性設(shè)置為“Fill”,這樣,即使調(diào)整窗體的大小,RichTextBox控件也會(huì)完全填充該窗體的表面區(qū)域。4.5.3多文檔界面(MDI)(2)為【文件】菜單中的【新建】菜單項(xiàng)創(chuàng)建

Click

事件處理程序,代碼如下:privatevoid新建NToolStripMenuItem_Click(objectsender,EventArgse){Form2MDIChild=newForm2();//設(shè)置子窗體的父窗體MDIChild.MdiParent=this;//創(chuàng)建一個(gè)MDI子窗體并顯示MDIChild.Show();}4.5.3多文檔界面(MDI)(3)運(yùn)行程序,每單擊一次【文件】→【新建】菜單,就會(huì)創(chuàng)建一個(gè)新的

MDI子窗體,運(yùn)行結(jié)果如圖4.45所示。4.5.3多文檔界面(MDI)3.確定活動(dòng)的子窗體繼續(xù)上面的例子,它具有包含RichTextBox控件的一個(gè)或多個(gè)MDI子窗口。將活動(dòng)子窗體中活動(dòng)控件的文本復(fù)制到剪貼板,代碼所示。在多文檔程序的上下文中,需要將數(shù)據(jù)發(fā)送到活動(dòng)子窗口,例如,將剪貼板上的文本復(fù)制到活動(dòng)子窗體中的活動(dòng)控件,代碼所示。4.5.3多文檔界面(MDI)4.排列子窗體為了排列子窗體,用

LayoutMdi()方法為

MDI

父窗體設(shè)置

MdiLayout

枚舉,枚舉值如表4.21所示。例如,對(duì)MDI父窗體(myForm1)的子窗體使用MdiLayout枚舉的“層疊”設(shè)置,代碼如下:myForm1.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade);4.5.3多文檔界面(MDI)【例4.13】將【例4.12】中的記事本程序改寫(xiě)為MDI應(yīng)用程序。設(shè)計(jì)步驟:(1)新建WinForm項(xiàng)目并添加控件新建

WinForm

項(xiàng)目,命名為“MDINotepad”。從工具箱中拖曳

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論