![《C#程序設(shè)計(jì)基礎(chǔ)教程》課件第6章_第1頁](http://file4.renrendoc.com/view12/M09/21/3A/wKhkGWZJmbeAdXgzAACHCliccMQ630.jpg)
![《C#程序設(shè)計(jì)基礎(chǔ)教程》課件第6章_第2頁](http://file4.renrendoc.com/view12/M09/21/3A/wKhkGWZJmbeAdXgzAACHCliccMQ6302.jpg)
![《C#程序設(shè)計(jì)基礎(chǔ)教程》課件第6章_第3頁](http://file4.renrendoc.com/view12/M09/21/3A/wKhkGWZJmbeAdXgzAACHCliccMQ6303.jpg)
![《C#程序設(shè)計(jì)基礎(chǔ)教程》課件第6章_第4頁](http://file4.renrendoc.com/view12/M09/21/3A/wKhkGWZJmbeAdXgzAACHCliccMQ6304.jpg)
![《C#程序設(shè)計(jì)基礎(chǔ)教程》課件第6章_第5頁](http://file4.renrendoc.com/view12/M09/21/3A/wKhkGWZJmbeAdXgzAACHCliccMQ6305.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章WinForm基礎(chǔ)(三)6.1消息框6.2對(duì)話框6.3圖片瀏覽器
6.1消息框
在Windows應(yīng)用程序中,我們經(jīng)常需要和用戶進(jìn)行一些簡單的交流,這些交流的過程一般來說涉及的信息量都不是很大,操作也不復(fù)雜,對(duì)于這種類型的操作我們就不需要再單獨(dú)制作窗體了,可以直接使用系統(tǒng)提供的消息框。圖6-1就是一個(gè)典型的系統(tǒng)對(duì)話框。6.1.1語法結(jié)構(gòu)MessageBox類是系統(tǒng)定制好的消息框類,它在使用的時(shí)候是不用實(shí)例化的,直接調(diào)用其Show()方法就可以了,其最常用的語法結(jié)構(gòu)如下:MessageBox.Show(stringtext[stringcaption,MessageBoxButtonsbuttons,MessageBoxIconicon]);我們可以看到這個(gè)方法帶有4個(gè)參數(shù),這些參數(shù)的作用是:text:必選參數(shù),string類型,要在消息框上呈現(xiàn)的文本。caption:可選參數(shù),string類型,要在消息框的標(biāo)題欄中顯示的文本。buttons:可選參數(shù),MessageBoxButtons類型,MessageBoxButtons值之一,指定在消息框中顯示哪些按鈕。表6-1列出了MessageBoxButtons的可取值及其描述。icon:可選參數(shù),MessageBoxIcon類型,MessageBoxIcon值之一,指定在消息框中顯示哪個(gè)圖標(biāo)。表6-2列出了MessageBoxIcon可取值及其描述。Show()方法的返回是DialogResult類型的,其值是DialogResult的值之一,用來確定用戶的選擇結(jié)果。表6-3列出了DialogResult的可取值及其描述。6.1.2使用消息框看起來比較復(fù)雜,但是使用起來卻非常簡單,在最簡單的情況下,我們甚至可以只給出一個(gè)參數(shù)來使用它:MessageBox.Show("HelloC#!");當(dāng)然,這樣的消息框是很簡陋的,內(nèi)容只是我們所給出的文本,沒有標(biāo)題和圖標(biāo),所以看起來很不專業(yè),而且只有一個(gè)“確定”按鈕,如圖6-2所示。這么簡單的消息框不要說用戶,就是開發(fā)人員都不會(huì)滿意,所以我們要給出更多的參數(shù)以制作更加專業(yè)的消息框:MessageBox.Show("HelloC#!","系統(tǒng)消息",MessageBoxButtons.OK,MessageBoxIcon.Information);這一次我們給出了Show()方法完整的四個(gè)參數(shù),除了第一個(gè)參數(shù)沒有變化外,我們還添加了“系統(tǒng)消息”作為消息框的標(biāo)題,按鈕指定采用“OK”,也就是“確定”按鈕,圖標(biāo)則采用“Information”,其運(yùn)行效果如圖6-3所示。這樣的消息框看起來就專業(yè)多了,但是它還是無法實(shí)現(xiàn)和用戶的交互操作,因此我們還需要對(duì)消息框進(jìn)行更進(jìn)一步的改進(jìn),這個(gè)時(shí)候改進(jìn)的重點(diǎn)就放在了Show()方法的后兩個(gè)參數(shù)了:if(MessageBox.Show("刪除選中的電影?","系統(tǒng)消息",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes){//執(zhí)行刪除操作}和上面的代碼相比,我們只是做了簡單的調(diào)整,按鈕由原來的“OK”變成了“YesNo”,這樣消息框中就出現(xiàn)了兩個(gè)按鈕,圖標(biāo)也從“Information”變成了“Question”。既然是兩個(gè)按鈕,那就會(huì)有兩種反饋結(jié)果,因此我們通過一個(gè)if結(jié)構(gòu)對(duì)消息框的返回進(jìn)行判斷,使用的是DialogResult,如果其值為“Yes”,則說明用戶點(diǎn)擊了“是(Y)”按鈕,其運(yùn)行效果如圖6-4所示。
6.2對(duì)話框
對(duì)話框是WinForm中另外一種交互控件,它們常用的有5個(gè),分別是:OpenFileDialog、SaveFileDialog、ColorDialog、FontDialog和FolderBrowserDialog。這5個(gè)控件具有相似的操作、方法和屬性,它們的作用就是通過對(duì)話框的方式來實(shí)現(xiàn)和用戶的交互。6.2.1OpenFileDialogOpenFileDialog控件的作用是提示用戶打開文件,其常用的屬性有:FileName:獲取或設(shè)置用戶通過文件對(duì)話框所選定的文件名的字符串。FileNames:獲取對(duì)話框中所有選定文件的文件名。Filter:獲取或設(shè)置當(dāng)前文件名篩選器字符串,其書寫格式為:篩選器名稱|篩選器。Multiselect:指示對(duì)話框是否允許選擇多個(gè)文件。常用的方法只有ShowDialog()這一個(gè),即打開對(duì)話框的方法,不過在使用的時(shí)候我們都會(huì)先設(shè)置文件篩選器:openFileDialog1.Filter="文本文件(*.txt)|*.txt";openFileDialog1.ShowDialog();stringfile=openFileDialog1.FileName;在上面的代碼中,我們首先設(shè)定了文件篩選器為只能夠看到txt類型的文件,然后打開對(duì)話框,用戶選擇文件后將其放到一個(gè)string類型的變量中,其運(yùn)行效果如圖6-5所示。我們發(fā)現(xiàn),在上面的對(duì)話框中盡管文件夾下有很多文件,但是只有文本文件才能夠通過篩選器并顯示出來,并且默認(rèn)情況下我們只能夠選擇一個(gè)文件,如果需要選擇多個(gè)文件,可以將Multiselect屬性設(shè)置為True。另一個(gè)經(jīng)常碰到的問題是篩選器,如果要篩選多種類型的文件該怎么辦?例如,我們用一個(gè)對(duì)話框要求用戶打開圖片,可是圖片可以是BMP類型,也可以是JPEG或別的類型,這時(shí)篩選器就可以寫成這樣:openFileDialog1.Filter="圖片(*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png";這樣的篩選器就可以同時(shí)篩選多種類型的文件。我們甚至可以將篩選器寫成這樣的:openFileDialog1.Filter="圖片(BMP/JPG/PNG)|*.bmp;*.jpg;*.png|文本文件(TXT/RTF/DOC)|*.txt;*.rtf;*.doc|所有文件|*.*";我們可以看到,通過一個(gè)“|”符號(hào),我們可以同時(shí)設(shè)置多個(gè)篩選器,運(yùn)行的時(shí)候系統(tǒng)會(huì)自動(dòng)將這些篩選器進(jìn)行分割,如圖6-6所示。6.2.2SaveFileDialogSaveFileDialog控件和OpenFileDialog控件很相似,常用的屬性和方法也都一樣,區(qū)別在于SaveFileDialog控件多了兩個(gè)屬性:CreatePrompt:獲取或設(shè)置一個(gè)值,該值指示如果用戶指定不存在的文件,對(duì)話框是否提示用戶允許創(chuàng)建該文件。OverwritePrompt:獲取或設(shè)置一個(gè)值,該值指示如果用戶指定的文件名已存在,對(duì)話框是否顯示警告。由于SaveFileDialog和OpenFileDialog對(duì)話框的使用方式是一樣的,因此這里我們不再對(duì)其做過多的討論。6.2.3ColorDialogColorDialog對(duì)話框的作用是讓用戶通過它來選擇一個(gè)顏色或者允許用戶定義自定義顏色。該對(duì)話框的常用屬性有:AllowFullOpen:指示用戶是否可以使用該對(duì)話框定義自定義顏色。Color:獲取或設(shè)置用戶選定的顏色。FullOpen:指示用于創(chuàng)建自定義顏色的控件在對(duì)話框打開時(shí)是否可見。打開ColorDialog對(duì)話框也是使用ShowDialog()方法:colorDialog1.ShowDialog();根據(jù)屬性設(shè)置的差別,對(duì)話框打開后的樣式也有所區(qū)別,如圖6-7所示。無論采用哪種樣式,ColorDialog對(duì)話框返回的都是一個(gè)Color對(duì)象:Colorcol=colorDialog1.Color;6.2.4FolderBrowserDialog用戶在實(shí)際的使用過程中,除了會(huì)選擇文件之外,也可能需要選擇一個(gè)文件夾,這個(gè)時(shí)候我們就需要FolderBrowserDialog對(duì)話框了,它的作用是提供一種方法,讓用戶可以瀏覽、創(chuàng)建并最終選擇一個(gè)文件夾。需要注意的是,該對(duì)話框只允許用戶選擇文件夾而非文件。文件夾的瀏覽通過樹控件完成,通過這個(gè)對(duì)話框我們可以選擇文件系統(tǒng)中的文件夾,但是不能選擇虛擬文件夾。FolderBrowserDialog對(duì)話框常用的屬性有:Description:獲取或設(shè)置對(duì)話框中在樹視圖控件上顯示的說明文本。RootFolder:獲取或設(shè)置從其開始瀏覽的起始文件夾。SelectedPath:獲取或設(shè)置用戶選定的路徑。ShowNewFolderButton:指示是否在文件夾瀏覽對(duì)話框中顯示“新建文件夾”按鈕。打開FolderBrowserDialog對(duì)話框也是使用ShowDialog()方法:folderBrowserDialog1.ShowDialog();根據(jù)屬性設(shè)置的差別,對(duì)話框打開后的樣式也有所區(qū)別,如圖6-8所示。不管采用哪種樣式,F(xiàn)olderBrowserDialog對(duì)話框返回的都是一個(gè)包含用戶所選擇的文件夾的字符串:stringpath=folderBrowserDialog1.SelectedPath;6.2.5FontDialogFontDialog對(duì)話框的作用是幫助用戶從本地計(jì)算機(jī)上安裝的字體中選擇一種字體,其常用屬性有:AllowScriptChange:用戶能否更改指定的字符集。AllowSimulations:指示對(duì)話框是否允許更改字體模擬。Font:獲取或設(shè)置選定的字體。ShowApply:對(duì)話框是否包含“應(yīng)用”按鈕。ShowColor:對(duì)話框是否顯示顏色選擇。ShowEffects:對(duì)話框是否包含允許用戶指定刪除線、下劃線和文本顏色選項(xiàng)的控件。FontDialog對(duì)話框的打開方法也是ShowDialog():fontDialog1.ShowDialog();根據(jù)屬性設(shè)置的差別,對(duì)話框打開后的樣式也有所區(qū)別,如圖6-9所示。不管采用哪種樣式,F(xiàn)ontDialog對(duì)話框都返回一個(gè)Font對(duì)象:textBox1.Font=fontDialog1.Font;
6.3圖片瀏覽器
6.3.1問題首先我們制作一個(gè)簡單的圖片瀏覽器,其運(yùn)行效果如圖6-10所示。整個(gè)應(yīng)用程序只有一個(gè)簡單的窗體,操作是由一個(gè)右鍵彈出菜單和兩個(gè)圖片組成的,具體要求如下:(1)窗體加載的時(shí)候不顯示任何圖片,同時(shí)“上一張”和“下一張”按鈕不可用。(2)在窗體上右鍵單擊彈出菜單,菜單包括“打開圖片”、“打開文件夾”、“圖片另存為”和“退出”。點(diǎn)擊“打開圖片”菜單,打開一個(gè)對(duì)話框讓用戶選擇一張JPG圖片并顯示,“上一張”和“下一張”按鈕不可用,如圖6-11所示。(3)點(diǎn)擊“打開文件夾”菜單,打開一個(gè)對(duì)話框讓用戶選擇一個(gè)文件夾,并顯示該文件夾下的第一張圖片,“上一張”和“下一張”按鈕變?yōu)榭捎茫鐖D6-12所示。(4)點(diǎn)擊“圖片另存為”菜單,打開一個(gè)對(duì)話框讓用戶選擇另存為圖片的路徑和名稱。(5)點(diǎn)擊“退出”菜單,關(guān)閉窗體并退出系統(tǒng)。6.3.2需求分析圖片瀏覽器中的大部分功能所使用到的技能點(diǎn)我們?cè)谇懊娴恼鹿?jié)中都已經(jīng)學(xué)習(xí)到了,接下來我們將從三個(gè)方面進(jìn)行深入的分析。1.窗體制作本次我們制作的小程序所包含的控件并不多,表6-4中列出了所有的控件及其屬性設(shè)置。這些控件和屬性大部分我們?cè)谇懊娴恼鹿?jié)中都學(xué)習(xí)過,這里需要注意的是Dock和Anchor屬性以及Splitter控件。Dock和Anchor屬性都是用來控制控件的布局的,WinForm中幾乎所有的控件都具有這兩個(gè)屬性。具體來說,我們?cè)谥谱鞔绑w的時(shí)候都會(huì)遇到這樣的問題:一旦用戶更改了窗體的大小,我們?cè)瓉碓O(shè)計(jì)好的窗體就會(huì)變得面目全非。其原因就在于控件在窗體上定位的時(shí)候是以其左頂點(diǎn)的坐標(biāo)為基準(zhǔn)的,因此控件默認(rèn)情況下和窗體的左邊和頂端的距離保持不變,當(dāng)窗體的大小發(fā)生變化時(shí),自然就會(huì)破壞布局。解決方法是合理地使用控件的Dock屬性和Anchor屬性。Dock屬性用來設(shè)定控件的??糠绞?。所謂???,就是指定控件與其父控件的哪條邊對(duì)齊,同時(shí)在調(diào)整控件的父控件大小時(shí)自動(dòng)調(diào)整控件的大小。例如,將Dock設(shè)置為DockStyle.Left將導(dǎo)致控件與其父控件的左邊緣對(duì)齊,并在父控件調(diào)整大小時(shí)調(diào)整自身大小,如圖6-13所示。Anchor屬性則是將控件綁定到容器的邊緣并確定控件隨其父控件一起調(diào)整大小。使用Anchor屬性可以定義在調(diào)整控件的父控件大小時(shí)如何自動(dòng)調(diào)整控件的大小。將控件錨定到其父控件后,可確保當(dāng)調(diào)整父控件的大小時(shí)錨定的邊緣與父控件的邊緣的相對(duì)位置保持不變,如圖6-14所示。需要注意的是,Anchor和Dock屬性是互相排斥的,即每次只可以設(shè)置其中的一個(gè)屬性,最后設(shè)置的屬性優(yōu)先。另外一個(gè)需要注意的是Splitter控件,它是一個(gè)界面的拆分器,允許用戶調(diào)整??靠丶拇笮?。Splitter控件使用戶可以在運(yùn)行時(shí)調(diào)整??康絊plitter控件邊緣的控件的大小。當(dāng)我們將鼠標(biāo)指針移到Splitter控件上時(shí),光標(biāo)將更改以指示可以調(diào)整停靠到Splitter控件的那些控件的大小。在使用Splitter控件時(shí),我們首先需要將希望能夠調(diào)整大小的控件停靠到一個(gè)容器的邊緣,然后將拆分器停靠到該容器的同一側(cè)。當(dāng)然我們不是為了調(diào)整圖片的大小,而是為了讓圖片能夠隨著窗體一起改變,因此要將Splitter控件的Enabled屬性設(shè)定為False。2.多圖片讀取與查看在圖片瀏覽器中,有一個(gè)功能比較復(fù)雜,即“打開文件夾”功能,它需要我們將用戶所選擇的文件夾下的所有*.jpg類型的文件都找出來,并且能夠循環(huán)查看。這里的難點(diǎn)有兩個(gè):如何查找文件夾下的圖片文件和如何循環(huán)查看圖片。查看某個(gè)文件夾下指定類型的文件,我們可以使用位于System.IO名稱空間下的Directory類,它提供了一個(gè)靜態(tài)方法GetFiles()可以幫助我們?cè)谥付ǖ奈募A下查找文件,其語法結(jié)構(gòu)如下:publicstaticstring[]GetFiles(stringpath[,stringsearchPattern, SearchOptionsearchOption])該方法是一個(gè)靜態(tài)方法,因此在使用的時(shí)候不需要對(duì)象,直接通過Directory類調(diào)用,它帶有三個(gè)參數(shù):Path:string類型,所要操作的文件夾。searchPattern:string類型可選參數(shù),文件篩選器。SearchOption:SearchOption類型可選參數(shù),指定搜索時(shí)是否包含子目錄。該方法返回一個(gè)字符串類型的數(shù)組,也就是所有符合條件的文件的路徑。在圖片瀏覽器中,我們可以通過對(duì)話框讓用戶選擇路徑,然后使用該方法來完成對(duì)所有圖片文件的搜索:folderBrowserDialog1.ShowDialog();stringpath=folderBrowserDialog1.SelectedPath;if(!string.IsNullOrEmpty(path)){string[]files=Directory.GetFiles(path,"*.jpg");}在上面的代碼中,我們首先通過ShowDialog()方法打開了一個(gè)FolderBrowserDialog對(duì)話框,然后通過一個(gè)字符串變量來取得用戶所選擇的路徑。當(dāng)然,用戶可能選擇了一個(gè)路徑,也可能沒有選擇,因此接下來我們通過一個(gè)if結(jié)構(gòu)來進(jìn)行判斷,判斷的方式就是通過string類所提供的靜態(tài)方法IsNullOrEmpty(),這個(gè)方法可以判斷指定的字符串是否為空。如果通過了驗(yàn)證,則在接下來的代碼中通過GetFiles()方法來讀取文件信息,這里我們所采用的篩選條件是所有的jpg文件。這里我們需要格外注意searchPattern這個(gè)參數(shù)。首先,它可以使用“*”和“?”通配說明符,前者通配零個(gè)或多個(gè)字符,后者通配零個(gè)或一個(gè)字符。例如,searchPattern字符串“*t”搜索path中所有以字母“t”結(jié)尾的名稱,searchPattern字符串“s*”搜索path中所有以字母“s”開頭的名稱。另外,在searchPattern中使用星號(hào)通配符(如“*.txt”)時(shí),擴(kuò)展名長度正好為三個(gè)字符時(shí)的匹配行為與擴(kuò)展名長度多余或少于三個(gè)字符時(shí)的匹配行為有所不同。文件擴(kuò)展名正好是三個(gè)字符的searchPattern將返回?cái)U(kuò)展名為三個(gè)或更多字符的文件,其中前三個(gè)字符與searchPattern中指定的文件擴(kuò)展名匹配。文件擴(kuò)展名為一個(gè)、兩個(gè)或三個(gè)以上字符的searchPattern僅返回?cái)U(kuò)展名長度正好與searchPattern中指定的文件擴(kuò)展名匹配的文件。使用問號(hào)通配符字符時(shí),則僅返回與指定文件擴(kuò)展名匹配的文件。例如,假設(shè)目錄下有兩個(gè)文件“file1.txt”和“file1.txtother”,使用“file?.txt”搜索模式時(shí)只返回第一個(gè)文件,而使用“file*.txt”搜索模式時(shí)會(huì)同時(shí)返回這兩個(gè)文件。接下來我們就需要將圖片展示出來了,這個(gè)過程我們?cè)谇懊嬉呀?jīng)學(xué)習(xí)過了,通過Image類的FromFile()方法即可實(shí)現(xiàn):picShowPic.Image=Image.FromFile(path);問題的焦點(diǎn)就在于該方法的參數(shù)上,它需要一個(gè)string類型的參數(shù),將文件的路徑傳遞進(jìn)來,而我們通過上面的GetFiles()方法獲得的是一個(gè)包含很多文件路徑的字符串?dāng)?shù)組,于是很自然地我們就想到了通過下標(biāo)來提取數(shù)組中的指定路徑并顯示:picShowPic.Image=Image.FromFile(files[index]);通過變換index的值,我們就可以隨意提取數(shù)組中的某一個(gè)文件來顯示。3.圖片另存圖片的轉(zhuǎn)存是我們這個(gè)小程序中最難的一部分,其最理想的實(shí)現(xiàn)方式就是采用文件流的方式,即將一個(gè)圖片文件讀入到內(nèi)存中的一個(gè)文件流對(duì)象中,再將這個(gè)文件流對(duì)象寫入到另一個(gè)圖片文件中,但是這已經(jīng)大大超出了本章所學(xué)習(xí)的內(nèi)容,因此我們需要采用文件拷貝的方式來實(shí)現(xiàn)。事實(shí)上,文件拷貝的實(shí)現(xiàn)過程也不難理解,就是將源文件通過相應(yīng)的方法拷貝到用戶指定的新路徑中,從而實(shí)現(xiàn)另存為的功能。這里我們就要用到System.IO名稱空間下的File類了,這個(gè)類是用來進(jìn)行文件操作的,在它的眾多方法中有一個(gè)Copy()方法可以用來進(jìn)行文件拷貝,其語法如下:publicstaticvoidCopy(stringsourceFileName,stringdestFileName[,booloverwrite])該方法也是一個(gè)靜態(tài)方法,并且?guī)в腥齻€(gè)參數(shù):sourceFileName:string類型,要復(fù)制的源文件。destFileName:string類型,目標(biāo)文件。overwrite:bool類型可選參數(shù),是否允許覆蓋目標(biāo)文件。仔細(xì)觀察這個(gè)方法我們就會(huì)發(fā)現(xiàn),現(xiàn)在問題的焦點(diǎn)集中在兩個(gè)路徑上了,也就是源文件路徑和目標(biāo)文件路徑。對(duì)于目標(biāo)文件路徑我們通過一個(gè)SaveFileDialog對(duì)話框就可以很容易地取得,但是源文件的路徑該如何取得呢?其實(shí)在前面顯示圖片環(huán)節(jié)我們已接觸過圖片的路徑,也就是說我們?cè)谇懊娴牟僮髦幸呀?jīng)取得了源文件的路徑,只不過我們將其顯示出來后就沒再繼續(xù)使用這個(gè)路徑了,現(xiàn)在我們只需要將其用于這里即可。當(dāng)然這需要幾個(gè)步驟,首先需要將其保存起來,方式有很多種,這里我們采用PictureBox控件Tag屬性:pictureBox1.Tag=files[index];Tag屬性主要是用來存放用戶自定義的數(shù)據(jù),這里剛好用來存放圖片的路徑。接下來我們還要將其取出來:stringsource=pictureBox1.Tag.ToString();因?yàn)門ag屬性是一個(gè)object類型的,因此這里通過ToString()方法將其轉(zhuǎn)換為string類型的。當(dāng)然,這不是唯一的辦法,通過一個(gè)全局變量或者一個(gè)Label控件也可以達(dá)到同樣的目的,這么做的原因只是讓我們多一種選擇?,F(xiàn)在我們已經(jīng)獲得了文件拷貝的所有元素,接下來就可以完成這個(gè)過程了:saveFileDialog1.ShowDialog();stringfile=saveFileDialog1.FileName;if(!string.IsNullOrEmpty(file)){stringsource=pictureBox1.Tag.ToString();File.Copy(source,file);}在上面的代碼中我們首先通過一個(gè)SaveFileDialog對(duì)話框取得用戶所要另存圖片的路徑,當(dāng)然這個(gè)路徑是要經(jīng)過驗(yàn)證的。如果驗(yàn)證通過,則將保存在PictureBox控件的Tag屬性中的源文件路徑提取出來,最后通過File類的Copy方法來完成圖片的拷貝。6.3.3實(shí)現(xiàn)圖片瀏覽器經(jīng)過上一階段的學(xué)習(xí),我們就可以完成圖片瀏覽器了:publicpartialclassfrmPicViewer:Form{string[]files=null;intindex=0;publicfrmPicViewer(){InitializeComponent();}//打開一張圖片privatevoidmnuOpenPic_Click(objectsender,EventArgse){dlgOpenFile.ShowDialog();stringfile=dlgOpenFile.FileName;if(!string.IsNullOrEmpty(file)){picShowPic.Image=Image.FromFile(file);picShowPic.Tag=file;lblMsg.Text="1/1";picPrev.Enabled=false;picNext.Enabled=false;}}//打開多張圖片privatevoidmnuOpenFolder_Click(objectsender,EventArgse){dlgOpenFolder.ShowDialog();stringpath=dlgOpenFolder.SelectedPath;picPrev.Enabled=true;picNext.Enabled=true;if(!string.IsNullOrEmpty(path)){files=Directory.GetFiles(path,"*.jpg");ShowPic();}}//顯示圖片privatevoidShowPic(){if(index<0)index=files.Length-1;if(index>files.Length-1)index=0;picShowPic.Image=Image.FromFile(files[index]);picShowPic.Tag=files[index];lblMsg.Text=(index+1).ToString()+"/"+(files.Length+1).ToString();}//下一張圖片privatevoidpicNext_Click(objectsender,EventArgse){index++;ShowPic();}//上一張圖片privatevoidpicPrev_Click(objectsender,EventArgse){index--;ShowPic();}//圖片另存為privatevoidmnuSaveAs_Click(objectsender,EventArgse){dlgSaveAs.ShowDialog();stringfile=dlgSaveAs.FileName;if(!string.IsNullOrEmpty(file)){
stringsource=picShowPic.Tag.ToString();File
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦產(chǎn)品供貨協(xié)議合同
- 有車輛的離婚協(xié)議書
- 北京商品房認(rèn)購協(xié)議書
- 農(nóng)業(yè)種植技術(shù)指導(dǎo)書
- 純技術(shù)入股合作的協(xié)議書
- 湖南離婚協(xié)議書年
- 三農(nóng)村土地整治與開發(fā)方案
- 托管班合作協(xié)議書
- 股權(quán)融資合同書
- 標(biāo)準(zhǔn)汽車租賃合同協(xié)議
- 四年級(jí)數(shù)學(xué)脫式計(jì)算練習(xí)題100道
- 高考語文復(fù)習(xí)高中語文文言文注釋集萃
- 初中歷史 教材分析與教學(xué)策略 課件
- (完整word版)手卡模板
- GB/T 13912-2020金屬覆蓋層鋼鐵制件熱浸鍍鋅層技術(shù)要求及試驗(yàn)方法
- 幼兒剪紙-打印版
- 中小學(xué)2021年秋季開學(xué)第一課手心班會(huì)圖文精品
- 如何提高和加強(qiáng)人力資源隊(duì)伍的建設(shè)
- 2022年同等學(xué)力人員申請(qǐng)碩士學(xué)位日語水平統(tǒng)一考試真題
- 四川省綿陽市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 病毒性感染性腹瀉醫(yī)學(xué)課件
評(píng)論
0/150
提交評(píng)論