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

下載本文檔

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

文檔簡介

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

4.1開發(fā)步驟演示4.2窗體及其特性4.3Windows常用控件4.4對話框應(yīng)用4.5Windows文檔程序設(shè)計4.1開發(fā)步驟演示【例4.1】設(shè)計一個加法器,要求是圖形界面的Windows程序。1.建立項目在VisualStudio2010開發(fā)環(huán)境(以下簡稱VS2010)中單擊【文件】→【新建】→【項目】,彈出如圖4.1所示的“新建項目”對話框。4.1開發(fā)步驟演示2.界面設(shè)計系統(tǒng)提供了一個默認(rèn)的窗體。通過工具箱向其中添加各種控件來設(shè)計應(yīng)用程序的界面。具體操作是:用鼠標(biāo)選擇工具箱中需要添加到窗體的控件,然后拖放到窗體中即可。這里,我們將窗體命名為“TestForm”(意在本例主要用于“測試窗體的性質(zhì)”),將它的Name屬性及Text屬性均改為TestForm。向窗體中添加2個Label控件、1個Button控件和3個TextBox控件,調(diào)整各個控件的大小和位置,完成一個簡單的整數(shù)加法器界面的設(shè)計。4.1開發(fā)步驟演示3.屬性設(shè)計首先,在窗體中選中控件。然后在屬性窗口中設(shè)置該控件相應(yīng)的屬性,如表4.1所示。設(shè)置好屬性的窗體效果如圖4.2所示。4.1開發(fā)步驟演示4.代碼設(shè)計雙擊Button1按鈕,進(jìn)入代碼編輯器。編寫代碼如下: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開發(fā)步驟演示5.運(yùn)行調(diào)試單擊工具欄中的

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

FormBorderStyle

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

Visible

屬性控制,如果在【例

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

WindowsFormsDemo

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

4.3

中窗體與控件的名稱是指它們的

Name

屬性值,在窗體設(shè)計器中分別雙擊兩個按鈕,在代碼編輯窗口中添加代碼,代碼如下所示: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窗體可見性控制由于這是本項目的第二個窗體,運(yùn)行程序必須選擇它為啟動窗體。在“解決方案資源管理器”中打開Program.cs文件,在Main方法中將Application“孕育”的窗體TestForm修改為FormOpacity即可,代碼如下:……[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);

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

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

StartPosition

屬性來指定,如圖

4.8

所示,Windows

應(yīng)用程序的StartPosition

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

StartPosition

屬性被置為Manual的前提下,就可以為Location屬性輸入值(以逗號分隔)來定位窗體,其中第1個數(shù)字(X)是指窗體到顯示區(qū)域左邊界的距離(像素),第

2

個數(shù)字(Y)是指窗體到顯示區(qū)域上邊界的距離(像素),展開Location屬性,分別輸入X和Y子屬性值,如圖4.9所示。4.2.3窗體的定位Location屬性的這些特點(diǎn),使它非常適用于在編程時定位窗體。編寫程序時,可以將窗體的Location屬性設(shè)置為Point來定義窗體的位置,例如: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個像素點(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)識控件大家族1.家族譜系C#中的很多對象被進(jìn)一步封裝,成為類似工業(yè)產(chǎn)品零件的部件,稱之為“組件”,所以C#也是面向組件的新型程序語言。Control(控件)類是“可視化組件”的基類,它形成了圖形化用戶界面的基礎(chǔ),屬于System.Windows.Forms命名空間,如圖4.10所示。4.3.1認(rèn)識控件大家族2.常用控件圖4.11是將要制作的“學(xué)生信息管理系統(tǒng)”表單界面的設(shè)計效果。4.3.1認(rèn)識控件大家族各控件的名稱及其在工具箱里的圖標(biāo),列于表4.5中。4.3.1認(rèn)識控件大家族3.控件屬性和事件(1)屬性大多數(shù)控件屬性都派生于

System.Windows.Forms.Control

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

Label和

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

StudentMIS

中新建窗體,命名為

Welcome,從工具箱中拖曳

2

Label

1

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

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

Show

方法以打開登錄窗體

loginForm,并隱藏自身,同時將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)啟動畫面如圖4.12所示。4.3.3按鈕與文本框1.按鈕控件在設(shè)計器中指定“接受”按鈕的方法是:選擇按鈕所駐留的窗體,在“屬性”窗口中將窗體的AcceptButton屬性設(shè)置為按鈕控件的名稱,如圖4.13所示。也可以用編程方式指定“接受”按鈕,在代碼中將窗體的

AcceptButton

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

CancelButton

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

CancelButton

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

SelectionStart

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

SelectionLength

屬性設(shè)置為要選擇的文本的長度。下面的代碼表示總是將插入點(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

窗體文本框,它在用戶輸入字符串時顯示占位符。將

TextBox

控件的

PasswordChar

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

Enter

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

textBox1_Enter

事件處理程序綁定到控件,代碼如下:privatevoidtextBox1_Enter(objectsender,System.EventArgse){textBox1.SelectionStart=0;textBox1.SelectionLength=textBox1.Text.Length;}TextBox控件還提供了一些方法,以方便用戶使用,如表4.9所示。4.3.3按鈕與文本框【例4.4】創(chuàng)建“學(xué)生信息管理系統(tǒng)”的登錄界面,并驗證登錄,用戶名和密碼均為admin,如圖4.14所示。按照圖4.14創(chuà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("用戶名或密碼不正確!","提示");}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

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

PictureBox

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

Image

屬性,單擊

按鈕顯示【選擇資源】對話框,如圖

4.15

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

控件通過SizeMode

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

publicstaticstringpath;publicstaticstringinfo;publicUpdate(){InitializeComponent();path=@"D:\MyDocuments\證件照.gif";pictureBox1.Image=Image.FromFile(path);} ……}}4.3.4圖片框在【預(yù)覽】窗體(Browser類)的構(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控件本項目中“性別”框?qū)ⅰ澳小薄ⅰ芭眱蓚€RadioButton

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

CheckBox

控件組織成為一個整體,如圖

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

RadioButton

被布局在“性別”分組框里,最簡單的做法是使用foreach語句遍歷組內(nèi)控件。在圖4.11中雙擊【提交】按鈕,編寫事件過程代碼:privatevoidmySubmitBtn_Click(objectsender,EventArgse){info="學(xué)號:"+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愛好:";foreach(ControlcontrolingbxFavor.Controls){ if((controlasCheckBox).Checked) { info+=(controlasCheckBox).Text+""; }}4.3.5選擇控件及分組上段代碼也是使用

Checked

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

dateTimerPicker1.Value

獲取所選擇的日期/時間。

dateTimerPicker1.Text

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

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

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

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

屬性設(shè)置為

true

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

屬性設(shè)置為

false

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

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

屬性類似于

SelectedIndex

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

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

SelectedIndex

的最大可能值大

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

ListBox

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

ListBox

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

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

StatusStrip

圖標(biāo)(參見表

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

4.24

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

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

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

Item

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

item屬性右邊的

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

4.24

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

Timer

控件到窗體。編寫定時器的

Tick事件,代碼如下:privatevoidtimer1_Tick(objectsender,EventArgse){toolStripStatusLabelNowTime.Text=string.Format("現(xiàn)在時間:{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對話框應(yīng)用4.4.1消息框.NET

框架使用

MessageBox

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

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

Form

類的

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

值,通知用戶對話框中的哪個按鈕被單擊。DialogResult是一個枚舉類型,表

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

DialogResult

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

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

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

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

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

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

OpenFileDialog

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

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

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

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

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

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

Windows

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

MenuStrip

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

ToolStripMenuItem

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

Items

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

Enabled

屬性設(shè)置為

false

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

MenuStrip

Items

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

WinForm

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

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

4.5.2單文檔界面(SDI)(3)添加代碼在窗體設(shè)計器中分別雙擊菜單欄中的【撤銷】、【剪切】、【復(fù)制】、【粘貼】、【刪除】菜單按鈕,在事件窗口中為上下文菜單添加事件過程代碼:privatevoid撤銷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所示。至此,一個與Windows系統(tǒng)記事本程序相仿的程序就制作完成了。4.5.3多文檔界面(MDI)1.創(chuàng)建MDI父窗體將MenuStrip組件從工具箱拖拽至窗體中,創(chuàng)建一個Text屬性為“文件(&F)”的頂級菜單,該菜單帶有“新建(N)”和“關(guān)閉(C)”兩個子菜單項。再創(chuàng)建一個名為“窗口(W)”的頂級菜單。第

1

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

2

個菜單將跟蹤打開MDI子窗口。此時,已創(chuàng)建了一個

MDI

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

Click

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

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

LayoutMdi()方法為

MDI

父窗體設(shè)置

MdiLayout

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

WinForm

項目,命名為“MDINotepad”。從工具箱中拖曳

溫馨提示

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

最新文檔

評論

0/150

提交評論