版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 圖片瀏覽器是日常應(yīng)用中必可少的應(yīng)用軟件之一,本次畢業(yè)設(shè)計中,運用C#來設(shè)計圖片瀏覽器。文中詳細敘述了瀏覽器的詳細制作過程。采用C#提供的控件數(shù)組來實現(xiàn),并對可視區(qū)內(nèi)的圖形進行局部更新方法進行了詳述。</p><p> 系統(tǒng)功能主要有圖片的瀏覽、預覽、圖片拷貝、刪除、粘貼等功能。并增加了各種鍵盤控
2、制功能。實現(xiàn)了對多種格式圖形的瀏覽,包括gif、JPG、BMP、ICO等圖片格式。</p><p> 本圖片瀏覽程序具有實用性、穩(wěn)定性、易用性,和可維護性的特點,系統(tǒng)留了擴展接口,用戶可以根據(jù)實際需要對其功能進行擴充、完善與修改,使其符合自己的要求??傊?,本系統(tǒng)是一個逐步完善的系統(tǒng)。</p><p> 關(guān)鍵詞:圖片瀏覽器;控件數(shù)組;局部更新</p><p>&l
3、t;b> 目 錄</b></p><p> 摘 要III</p><p><b> 目 錄IV</b></p><p> 第一章 開發(fā)環(huán)境的介紹1</p><p> 1.1 C#的由來1</p><p> 1.2 C#的特點1</p>
4、<p> 1.3 .NET開發(fā)平臺3</p><p> 第二章 問題的定義及可行性研究5</p><p> 2.1問題的定義5</p><p> 2.2可行性研究5</p><p> 第三章 需求分析6</p><p> 3.1需求分析階段的任務(wù)6</p><p
5、> 3.2系統(tǒng)功能的詳細分析6</p><p> 第四章 總體設(shè)計7</p><p> 4.1總體設(shè)計階段的任務(wù)7</p><p> 4.2圖片瀏覽軟件功能的具體分析8</p><p> 第五章 詳細設(shè)計9</p><p> 5.1系統(tǒng)功能的詳細設(shè)計與實現(xiàn)9</p><
6、p> 5.1.1 MainForm窗體:9</p><p> 5.1.2 FrmCreateFolder窗體10</p><p> 5.1.3 FrmLoadPic窗體10</p><p> 5.1.4 PicInfo.cs窗體11</p><p> 5.1.5 Folder.cs窗體11</p>&l
7、t;p> 5.1.6 FrmCreateFolder.cs窗體12</p><p> 5.1.7 FrmLoadPic.cs窗體13</p><p> 5.1.8 MainForm.cs窗體14</p><p> 5.2關(guān)鍵技術(shù)介紹15</p><p> 第6章 測 試17</p><p>
8、 6.1軟件測試的目的和方法17</p><p> 6.2 軟件測試的步驟17</p><p> 第7章 總結(jié)與展望18</p><p><b> 致 謝19</b></p><p><b> 附錄120</b></p><p> 第一章 開發(fā)環(huán)境
9、的介紹</p><p> 1.1 C#的由來</p><p> 在過去的一段時間中,C和C++一直是商業(yè)軟件的開發(fā)領(lǐng)域中最具生命力的語言。雖然他們?yōu)槌绦騿T提供了豐富的功能。高度的靈活性和強大的底層控制力,但是利用C、C++語言開發(fā)的Windows應(yīng)用程序顯然復雜了很多,同時也犧牲了一定的效率與VB相比,同等級的C、C++完成一個程序往往需要更多的時間來完成開發(fā),因此各層人士都試圖尋找
10、一種新的語言,希望能在功能和功率之間找到一種更為理想的平衡點。</p><p> 針對這一問題,微軟公司與2000年6月26日正式發(fā)布C#。C#是一種最新的、面向?qū)ο蟮木幊陶Z言,C#使得程序員可以在Miscrsoft開發(fā)的最新的.NET平臺上快速的編寫應(yīng)用程序。</p><p> C#是一種簡單、現(xiàn)代、面向?qū)ο笄翌愋桶踩木幊陶Z言,C#語言從C和C++語言演化而來,同時C#具備了應(yīng)用程
11、序快速開發(fā)(Rapid Application Development,RAD)語言的高效率和C++固有的強大能力,并吸收了Java和Delphi等語言的特點和精華,是.NET開發(fā)的首選語言。</p><p> 1.2 C#的特點</p><p> 1 .簡潔易用的語法</p><p> C#主要從C和C++繼承而來,同時吸收Java和Delphi的優(yōu)點,摒
12、棄了C和C++中一些比較復雜而且不常用的語法元素比如父類繼承。使用C和C++時最令程序員生畏的語法是什么?大多數(shù)程序員會說:指針!C和C++中的指針雖然功能強大,但極不安全,稍不小心就會導致程序出錯,甚至導致系統(tǒng)奔潰。C#取消了指針,不允許直接對內(nèi)存進行操作,讓代碼運行在安全的環(huán)境中。此外,C#語法的很多變化無不體現(xiàn)了C#的簡潔之美。</p><p> 2 .自動的資源回收機制</p><p
13、> C#與.NET的完美集成,使得C#完全擁有.NET的自動回收機制。在windows中,提供給程序使用的一切軟、硬件統(tǒng)稱為資源。比如程序中需要在窗口上畫圖的筆就是一種資源,在早期的windows版本中,程序使用完資源后應(yīng)該及時解放,否則會導致系統(tǒng)資源不足而運行變慢。在.NET框架中,由于資源使用完后由系統(tǒng)自動清理,所以,編寫C#程序,不必小心翼翼地保證及時釋放資源,從而可以把更多的精力放在程序編寫的邏輯上。</p>
14、<p> 3 .與WEB的緊密結(jié)合</p><p> 網(wǎng)上辦公和電子商務(wù)在各行各業(yè)中的到越來越廣泛的的應(yīng)用,B/S模式程序的市場需求越來越多。在微軟的.NET開發(fā)套件中,C#與ASP.NET是相互融合的。ASP.NET的應(yīng)用程序可以使用VB.NET語法,也可以使用C#語法。使用C#語法編寫的ASP.NET結(jié)構(gòu)更嚴謹,運行更高效。由于有了WEB服務(wù)框架的幫助,對程序員來說,網(wǎng)絡(luò)服務(wù)看起來就像是C#
15、的本地對象。程序員們能夠利用他們已有的面對對象的只是和技巧開發(fā)WEB服務(wù)。僅需要使用簡單的C#語言結(jié)構(gòu),C#組件就能夠方便地為WEB服務(wù),并允許它們通過Internet被運行在任何操作系統(tǒng)上的任何語言所調(diào)用。</p><p> 4 .完整的安全性與錯誤處理</p><p> 語言的安全性與錯誤處理能力,是衡量一種語言是否優(yōu)秀的重要依據(jù)。任何人都會犯錯,即使是最熟練的程序員也不例外,如忘
16、記變量的初始化,對不屬于自己管理范圍內(nèi)存的空間進行修改等。這些錯誤常常產(chǎn)生難以預計的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡單錯誤的代價是讓人無法估計的。C#的先進設(shè)計思想可以消除軟件開發(fā)中的許多常見錯誤,并提供了包括類型安全在內(nèi)的完整的安全性能。為減少開發(fā)中的錯誤,C#幫助開發(fā)者通過更少的代碼完成相同的功能,這部大減輕了編程人員的工作量同時更有效的避免了從錯誤的產(chǎn)生。</p><p><b>
17、 5 .版本處理技術(shù)</b></p><p> 升級軟件系統(tǒng)中的組件(模塊)是一件容易產(chǎn)生錯誤的工作,在代碼的修改中可能對現(xiàn)存的軟件產(chǎn)生影響,很有可能導致程序的奔潰。為了幫助開發(fā)人員處理這些問題C#在語言中內(nèi)置了版本控制功能。C#提供內(nèi)置的版本支持來開發(fā)費用,使用C#將會使開發(fā)人員更輕易地開發(fā)和維護各種商業(yè)軟件。</p><p> 6 .靈活性和兼容性</p>
18、<p> 在簡化語法的同時,C#并沒有失去靈活性。盡管C#不是一種無限制語言,比如:他不能用來開發(fā)硬件驅(qū)動程序,在默認的狀態(tài)下沒有指針等,但是學習過程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。</p><p> 7. 快速應(yīng)用開發(fā)(RAD)功能</p><p> 支持快速開發(fā)(Rapid application development)可以說是目前開發(fā)語言最為重要的一大功能,也正
19、是C/C++的致命傷。網(wǎng)絡(luò)時代應(yīng)用系統(tǒng)的開發(fā)必須按照網(wǎng)絡(luò)時代的速度來進行,支持快速開發(fā)可以使得開發(fā)人員的開發(fā)效率倍增,從而使得他們可以從繁重的重復性勞動中解放出來。c#的RAD功能主要表現(xiàn)在例如垃圾收集、指代等眾多特性上。垃圾收集機制將減輕開發(fā)人員對內(nèi)存的管理負擔,而指代功能更是可以讓開發(fā)者不經(jīng)過內(nèi)部類就調(diào)用函數(shù)。利用c#的這些功能,可以使開發(fā)者通過較少的代碼來實現(xiàn)更強大的應(yīng)用程序,并且能夠更好地避免錯誤發(fā)生,從而縮短了應(yīng)用系統(tǒng)的開發(fā)周
20、期。</p><p><b> 8. 語言的自由性</b></p><p> 用C#編寫的程序能最大程度地和任何支持.NET的語言互相交換信息。能夠繼承和使用任何語言所編寫的程序可以稱得上是知識的繼承,這樣做的好處是節(jié)省了大量的工作,你不必把COBOL等語言強行改成另一種語言,.NET讓各種語言真正地互相交流了。</p><p> 9.
21、強大的Web服務(wù)端組件</p><p> 在c#的Web編程中,最讓人興奮的是Web服務(wù)端的組件,它們不僅包括傳統(tǒng)組件,還包括那些能夠自動連接五花八門服務(wù)的可編程組件,你可以用c#編寫自己的服務(wù)器端組件,服務(wù)器端組件和標準的HTML提供的服務(wù)自然是不一樣的,使用它們可以更自由、更容易地進行數(shù)據(jù)綁定。不久,那些視頻服務(wù)器組件也很快會出現(xiàn),有了這些強大的組件,我們可以設(shè)計出功能更加強勁的企業(yè)級分布式應(yīng)用系統(tǒng)。<
22、;/p><p><b> 10. 支持跨平臺</b></p><p> 隨著互聯(lián)網(wǎng)應(yīng)用程序的應(yīng)用越來越廣,人們逐漸意識到由于網(wǎng)絡(luò)系統(tǒng)錯綜復雜,使用的硬件設(shè)備和軟件系統(tǒng)各不相同,開發(fā)人員所設(shè)計的應(yīng)用程序必須具有強大的跨平臺性。C#編寫的應(yīng)用程序就具有強大的跨平臺性,這種跨平臺性也包括了c#程序的客戶端可以運行在不同類型的客戶端上,比如PDA、手機等非PC裝置。</
23、p><p> 11. 與XML的融合</p><p> 由于XML技術(shù)真正融入到了.NET和c#之中,c#的編程變成了真正意義的網(wǎng)絡(luò)編程,甚至可以說.NET和c#是專為XML而設(shè)計,使用C#的程序員可以輕松用c#內(nèi)含的類來使用XML技術(shù)。就這方面而言,目前c#提供給了程序員更多的自由和更好的性能來使用XML。</p><p> 12. 對C++的繼承</p&
24、gt;<p> C#繼承并保留了C++強大的功能,例如, c#保留了類型安全的檢測和重載功能,c#還提供了一些新功能取代了一些原來的ANSI C預處理程序的功能,提高了語言的類型安全等安全性</p><p> 1.3 .NET開發(fā)平臺</p><p> .NET是一個用于建立應(yīng)用程序的平臺,它在內(nèi)部封裝了大量的功能強大的應(yīng)用程序接口函數(shù)(API),利用這些函數(shù)可以開發(fā)
25、各類Windows應(yīng)用軟件。.NET還是一個開發(fā)平臺,它向廣大的程序員提供了功能強大的集成開發(fā)環(huán)境(IDE)———Visual Studio .NET。在未來,.NET還是一個運行、發(fā)布應(yīng)用程序的平臺,它可以將應(yīng)用程序作為一種服務(wù),通過Internet提供給分布在世界各個角落的網(wǎng)絡(luò)用戶。</p><p> .NET平臺對早期的開發(fā)平臺作了重大改進。.NET提供了一種新的軟件開發(fā)模型,它允許用不同程序設(shè)計語言創(chuàng)建
26、的應(yīng)用程序能相互通信。這個平臺也允許開發(fā)者創(chuàng)建基于Web的應(yīng)用程序,這些應(yīng)用程序能夠發(fā)布到多種不同的設(shè)備(甚至是無線電話)和臺式機上。</p><p> Microsoft的.NET 計劃為利用Internet和Web進行軟件的開發(fā)、設(shè)計和使用開辟了廣闊的新前景。.NET策略的一個主要方面是它與具體的語言或平臺無關(guān)。它不需求程序員使用惟一的一種程序設(shè)計語言。程序員可以將多種與.NET兼容的語言(圖1-1)結(jié)合起
27、來開發(fā).NET應(yīng)用程序。多個程序員可以共同參與同一個軟件項目,每個人可以使用自己最精通的.NET語言(如Visual C++ .NET、C#、Visual Basic®和其他許多語言)來編寫代碼。</p><p> 第二章 問題的定義及可行性研究</p><p><b> 2.1問題的定義</b></p><p> 開發(fā)的圖片瀏
28、覽器要具備良好的人機交互界面、對圖片實現(xiàn)分目錄管理用戶可以自行創(chuàng)建并刪除存放圖片的目錄、對目錄下的圖片以縮略圖的方式進行瀏覽、以實際大小或適合窗體大小瀏覽、對同目錄下的圖片以自動播放形式進行瀏覽并可以調(diào)整播放時間。</p><p> 圖片瀏覽器難點在于縮略圖的顯示,如果一個目錄中有很多圖片,而每張圖片的尺寸都比較大,把每張圖片都縮小并顯示出來需要花費很長的時間,這樣會導致應(yīng)用程序的假死現(xiàn)象(在沒有完成某項工作之
29、前,應(yīng)用程序無法進行其他操作)。</p><p><b> 2.2可行性研究</b></p><p> 處理這個問題可以采取多線程的方法,把顯示縮略圖的過程放在一個線程內(nèi),這樣在顯示縮略圖的過程中可以進行其他操作。另外一種解決方法是給每張圖片生成一張縮略圖,并存放于數(shù)據(jù)庫中,在瀏覽縮略圖時,直接從數(shù)據(jù)庫中讀取縮略圖并顯示。由于縮略圖非常小,并且是未經(jīng)壓縮的格式,讀
30、取速度非常快,這樣就能以很快的速度顯示完所有圖片的縮略圖。</p><p> 本次設(shè)計另辟蹊徑,以達到類似效果。在導入圖片的同時,為圖片生成100*100像素的bmp格式的縮略圖(如果原圖的長和寬都小于100像素,則按原圖尺寸生成縮略圖),把原圖和縮略圖分別存放于兩個目錄內(nèi),并一一對應(yīng)。通過原圖的文件名可以找到相對應(yīng)的縮略圖,如果縮略圖不存在,則即時生成相應(yīng)的縮略圖。實踐證明這樣做的效果令人滿意,能比較順暢的現(xiàn)
31、實多張圖片的縮略圖。</p><p><b> 第三章 需求分析</b></p><p> 3.1需求分析階段的任務(wù)</p><p> 1.分析該設(shè)計要實現(xiàn)哪些功能</p><p> (1)可以對目錄下的圖片以縮略的方式進行瀏覽,并在瀏覽過程中可以刪除一張或多張圖片。</p><p>
32、(2)可以以實際大小或適合窗體尺寸的方式對單張圖片進行瀏覽,并可以切換到同目錄下的上一張圖片或下一張圖片瀏覽。也可以對同目錄下的圖片以自動播放的形式進行瀏覽,并可以調(diào)整自動播放的時間間隔。</p><p> (3)可以在瀏覽某張圖片時將其刪除。</p><p> ?。?)可以以全屏幕的方式瀏覽圖片。 </p><p> 2.分析該設(shè)計功能實現(xiàn)的步驟及過程<
33、;/p><p> ?。?)主窗體,可以用于瀏覽和查看圖片。</p><p> (2)目錄窗體,用于創(chuàng)建圖片的管理目錄。</p><p> ?。?)導入圖片窗體,用于向目錄中導入圖片。 </p><p> 3.2系統(tǒng)功能的詳細分析</p><p> 具有良好的人機交互界面,有一定的計算機操作經(jīng)驗的用戶可以不經(jīng)
34、任何培訓就可以直接使用該軟件。</p><p> 對圖片實現(xiàn)分目錄管理,用戶可以自行創(chuàng)建并刪除存放圖片的目錄,并可以方便地將各種圖片存放于相應(yīng)的目錄之中。</p><p> 可以對目錄下的圖片以縮略圖的方式進行瀏覽,以方便用戶從眾多圖片中查找出自己想要的圖片,并在瀏覽過程中可以刪除一張或多張圖片。</p><p> 可以以實現(xiàn)大小或適合窗體尺寸的方式對單張圖片
35、進行瀏覽,并可以切換到同目錄下的上一張圖片或下一張圖片進行瀏覽。也可以對同目錄下的圖片以自動播放的形式進行瀏覽,并可以調(diào)整播放的時間間隔。</p><p> 可以為創(chuàng)建的目錄導入或刪除圖片。</p><p> 可以手動的進行圖片的瀏覽。</p><p> 該圖片瀏覽器應(yīng)該具有新增目錄,刪除目錄,導入圖像,刪除圖像,退出等功能,還有的功能可以在設(shè)計中不斷完善。&
36、lt;/p><p><b> 第四章 總體設(shè)計</b></p><p> 4.1總體設(shè)計階段的任務(wù)</p><p> 1. 界面設(shè)計:程序包括三個窗體。</p><p> (1)MainForm窗體:程序的主窗體,可以用于瀏覽和查看圖片,并對圖片進行管理。如圖4—1</p><p><b
37、> 圖4—1</b></p><p><b> 。</b></p><p> (2)FrmCreateFolder窗體:創(chuàng)建目錄窗體,用于創(chuàng)建圖片的管理目錄。如圖4—2</p><p><b> 圖4—2</b></p><p> (3)FrmLoadPic窗體:導入圖片
38、窗體,用于向目錄中導入圖片。如圖4—3</p><p><b> 圖4—3</b></p><p> 2. 代碼編寫:代碼包括5個文件。</p><p> (1) MainForm.cs:主窗體MainForm的代碼文件。</p><p> (2) FrmCreateFolde.cs:創(chuàng)建目錄窗體FrmCreat
39、eFolder的代碼文件。</p><p> (3) FrmLoadPic.cs:導入圖片窗體FrmLoadPic的代碼文件。</p><p> (4) PicInfo.cs:PicInfo類代碼文件。</p><p> (5) Folder.cs:Folder類代碼文件。</p><p> 4.2圖片瀏覽軟件功能的具體分析</
40、p><p> 1.目錄:自己手動創(chuàng)建一個圖片存儲目錄。</p><p> 2.目錄:把已經(jīng)創(chuàng)建的一個圖片存儲目錄刪除。</p><p> 3.圖像:導入一張圖片到創(chuàng)建的目錄中去。</p><p> 4.圖像:刪除一張在已經(jīng)創(chuàng)建的目錄中的圖片。</p><p> 5.和后退按鈕:手動控制圖片的前后瀏覽。</p
41、><p><b> 第五章 詳細設(shè)計 </b></p><p> 5.1系統(tǒng)功能的詳細設(shè)計與實現(xiàn)</p><p> 5.1.1 MainForm窗體:</p><p> (1). 創(chuàng)建一個新項目“圖片管理器”。把窗體改名為MainForm,并設(shè)置它的屬性。</p><p> (2).在窗體中
42、放置一個ToolStrip控件,再添加5個工具按鈕并進行改名和設(shè)置屬性。</p><p> (3).在工具欄中添加2個Separator。再在窗體中放2個ToolStrip控件并進行命名和屬性的設(shè)置,再添加6個工具按鈕,1個組合框,2個分隔條,并進行相應(yīng)的屬性改寫。</p><p> (4).在窗體上放置1個StatusStrip控件,它自動放置在窗體的最底部,在狀態(tài)欄中添加1個Pro
43、gressBar和1個StatusLabel。</p><p> (5).在窗體上放置1個ListBox控件并進行屬性設(shè)置。</p><p> (6).在LstFolder控件右邊放置一個Splitter控件,它會自動貼向LstFolder的右邊界靠齊,這個控件的作用是可以再程序運行時改變它左邊和右邊控件的寬度。</p><p> (7).在Splitter控
44、件的右側(cè)放置1個Panel控件,并設(shè)置它的屬性。</p><p> (8).在panel1上放置1個ListView控件,它用于顯示一個目錄下所有圖片的縮略圖。把它的OwnerDraw屬性設(shè)置為true,設(shè)置這個屬性后就可以手動繪制ListView內(nèi)各個項的圖標。并把View屬性設(shè)置為LargeIcon,這樣ListView就會以大圖標的方式顯示里面的每個項。在窗體上放置1個ImageList控件,并進行相關(guān)屬
45、性設(shè)置。在這里,ImageSize控件的作用并不是存放圖片,而是控制ListView各個項的繪圖區(qū)域的大小。</p><p> (9).在panel1上放置1個PictureBox控件,命名為pbPic,用于顯示單張圖片。</p><p> (10).在窗體上放置1個OpenFileDialog控件。</p><p> (11).在窗體上放置1個Tinner控
46、件,把它的Interval書信設(shè)置為2000。至此,主窗體界面制作完畢。如圖5—1所示</p><p> 5.1.2 FrmCreateFolder窗體</p><p> (1).新建一窗體,命名為FrmCteateFolder。</p><p> (2).在窗體中放置1個TextBox控件,命名為txtFolderName。 </p><
47、p> (3).在窗體中放置2個Button控件,分別命名為btnOK和btnCancel。并把它們的Text屬性設(shè)置為“確定”和“取消”。</p><p> 5.1.3 FrmLoadPic窗體</p><p> (1).新建一窗體,命名為FrmLoadPic。</p><p> (2).在窗體上放置1個ComboBox控件,命名為cbFolder。D
48、ropDownStyle屬性設(shè)置為:DropDownList</p><p> (3).在窗體上放置1個CheckedListBox控件,命名為chklsPic。HorizontalScrollbar屬性設(shè)置為true。</p><p> (4).在窗體上放置1個TextBox控件,命名為txtPicName。</p><p> (5).在窗體上放置4個But
49、ton控件。</p><p> (6).在窗體上放置1個OpenFileDialog控件,命名為openFileDialogSelPic,并把它的Multiselect屬性設(shè)置為true。</p><p><b> 代碼編寫</b></p><p> MainForm.cs:主窗體MainForm的代碼文件。</p><
50、;p> FrmCreateFolder.cs:創(chuàng)建目錄窗體FrmCreateFolder的代碼文件。</p><p> FrmLoadPic.cs:導入圖片窗體FrmLoadPic的代碼文件。</p><p> PicInfo.cs:PicInfo類代碼文件。</p><p> Folder.cs:Folder類代碼文件。</p><
51、;p> 5.1.4 PicInfo.cs窗體</p><p> 在解決方案資源管理器中的圖片管理器項目上右擊鼠標,在彈出菜單中選擇添加新建項。在添加新項窗口中選擇類,在名稱編輯框內(nèi)輸入“PicInfo.cs”。最后單擊添加按鈕添加一個新的類。</p><p> PicInfo是一個自定義的類,什么是類?可以這樣去理解:類可以存放某些信息,并能實現(xiàn)特定功能。類里有屬性和方法,就好
52、比銀行的提款機,通過使用提款機,可以查詢賬戶里還有還剩多少錢,也可以通過提款機取錢。在編程中定義類是為了把一些相關(guān)的功能包裝起來,放在一起,以方便在程序中使用。</p><p> Private string _fullName;</p><p> Private string _nameNoExtension;</p><p> 這兩行代碼聲明了兩個私有成員
53、變量,這兩個成員變量供類內(nèi)部使用,類的外部不可以直接訪問它們,但可以通過屬性來訪問和設(shè)置它們的值。</p><p> Public override string ToString ()</p><p><b> {</b></p><p> Return _fullName;</p><p><b>
54、 }</b></p><p> 這幾行代碼,重載了ToString()方法,由于PicInfo類的作用是把類實例作為項存放于復選列表框內(nèi)。而每個項顯示的文字正是通過訪問ToString()方法而獲得,重載這個方法,正是為了在復選列表框內(nèi)顯示指定的文字。</p><p> 5.1.5 Folder.cs窗體 </p><p> 在(解決方案資源管理器
55、)中的(圖片管理器)項目上右擊鼠標,在彈出菜單中選擇(添加)(新建項)。在(添加新項)窗口中選擇(類),在(名稱)編輯框內(nèi)輸入“Folder.cs”。最后單擊(添加)按鈕添加一個新的類。</p><p> 在第一次瀏覽一個目錄時,需要從硬盤讀取這個目錄下的所有縮略圖并顯示,此時所有縮略圖被載入內(nèi)存。如果切換到其他目錄時就從內(nèi)存中釋放這些數(shù)據(jù),再次瀏覽這個目錄時就導致程序重新從硬盤讀取數(shù)據(jù),這樣會使得縮略圖的顯示
56、速度變慢(內(nèi)存的速度遠勝于硬盤)。本案例中,只要瀏覽了某個目錄,就讓這個目錄下的所有縮略圖常駐于內(nèi)存,以供下次瀏覽時調(diào)用,直到應(yīng)用程序關(guān)閉為止。這樣做可能導致程序的內(nèi)存使用加大,但在一定程度上彌補了沒有使用多線程技術(shù)的遺憾。Folder類正是用于實現(xiàn)這個功能的,它封裝了縮略圖的生成、讀取、刪除、計算邊界的功能。</p><p> Foreach (string sourceFile in Directory.G
57、etFiles(_sourcePath))</p><p> 這一行的Directory.GetFiles(_sourcePath)方法訪問指定文件夾(_sourcePath)中的所有文件,并將它們的文件名存放于字符串數(shù)組中返回。</p><p> Public override string ToString()</p><p><b> {<
58、;/b></p><p> Return _name;</p><p><b> }</b></p><p> 這幾行代碼重載了ToString()方法,這樣做是為了在ListBox內(nèi)顯示指定的字符串,即目錄名稱。</p><p> 5.1.6 FrmCreateFolder.cs窗體</p>
59、<p> 打開FrmCreateFolder的設(shè)計窗體,分別雙擊(確定)和(取消)按鈕,為它們生成按鈕的單機事件。 </p><p> FrmCreateFolder窗體的作用是創(chuàng)建一個新的圖片管理目錄,所有圖片都存放于可執(zhí)行文件所在目錄下的(圖片目錄)文件夾之下,新建一個管理目錄會在(圖片目錄)文件夾下創(chuàng)建一個以管理目錄命名的文件夾。由于FrmCreateFolder窗體需要操作主窗體的列表
60、框控件,這就會涉及在不同窗體間傳遞參數(shù)的問題。在不同窗體間傳遞參數(shù)有很多種方法,本案例只使用其中的一種,就是在窗體構(gòu)造方法中傳遞參數(shù),這就需要重載窗體的構(gòu)造方法。</p><p> Public FrmCreateFolder()</p><p><b> {</b></p><p> InitializeComponent();<
61、/p><p><b> }</b></p><p> 這幾行代碼是Visual Studio 2005自動問窗體生成的構(gòu)造方法。</p><p> Public FrmCreateFolder(ListBox lst)</p><p><b> {</b></p><p>
62、; InitializeComponent();</p><p> lstFolder=lst; </p><p><b> }</b></p><p> 這幾行代碼則是手動編寫的重載的構(gòu)造方法。它使用了一個ListBox類型的參數(shù),由于ListBox是一個引用的類型,這樣當主窗體把一個ListBox類型當做參數(shù)傳遞給FrmCreate
63、Folder窗體的構(gòu)造方法后,就可以在FrmCreateFolder窗體中控制這個ListBox。</p><p> Private ListBox lstFolder;</p><p> 這行代碼聲明了一個ListBox類型的成員變量,用于存放從構(gòu)造方法傳遞進來的ListBox引用,以方便在整個窗體范圍內(nèi)進行調(diào)用。</p><p> String path=
64、Application.StartupPath+\\圖片目錄\\</p><p> 這行代碼中的Application.StartupPath屬性返回當前程序可執(zhí)行文件所在路徑。</p><p> 5.1.7 FrmLoadPic.cs窗體</p><p> 打開FrmLoadPic窗口,雙擊窗口空白處,為窗口生成一個load事件,</p>&l
65、t;p> FrmLoadPic窗體用于將圖片導入程序目錄中,它需要控制主窗體中的列表框和狀態(tài)欄兩個控件,所以在這幾行代碼的重載構(gòu)造方法中使用了兩個參數(shù),以傳遞對這兩個控件的引用。 </p><p> OpenFileDialogSelPic.Filter=“圖像文件(*.BMP;*.JPG;*.GIF;“+”*.jpeg;*.ico) *.BMP;*.JPG;*.GIF;*.jpeg;*.ico”;&l
66、t;/p><p> 這行代碼設(shè)置打開文件對話框的文件篩選器,這樣在使用打開文件對話框時,就只能選擇指定的文件類型。</p><p> 雙擊(瀏覽)按鈕,生成一個按鈕的單擊事件。為復選列表框chklsPics生成一個SelectedIndexChange事件。雙擊(修改)按鈕,生成一個按鈕的單擊事件。 </p><p> PicInfo picInfo=new Pi
67、cInfo(s);</p><p> 這行代碼使用了前面所編寫的PicInfo類,編寫它的主要原因是如果給圖像改名,需要有地方存放修改后的名字。</p><p> chklsPics.Items.Add(picInfo,true);</p><p> 這行代碼直接將上一行代碼所創(chuàng)建的PicInfo對象作為元素添加進復選列表框內(nèi)。復選列表框的項所顯示的文字將是P
68、icInfo對象的ToString()方法所返回的字符串。</p><p> 分別雙擊(確定)和(取消)按鈕,為它們生成按鈕單擊事件,</p><p> 載入圖像時,需要考慮一下幾個因素。</p><p> 1.由于可以從多個路徑選擇圖片,有可能出現(xiàn)圖片文件名相同但路徑不同的情況,把它復制到同一文件夾時會由于文件名相同而導致出錯。</p><
69、;p> 2.在把圖片復制到某文件夾時,文件夾有可能本身已有同名的文件,這樣同樣會導致出錯。常見的解決方案如看圖軟件ACDSee,在復制過程中如出現(xiàn)同名文件,將彈出提示窗口,供用戶進行改名或放棄復制操作。本案例使用了不同的方法,出現(xiàn)同名文件時并不提示用戶,而直接給圖片改名。</p><p> 給圖片重命名的算法如下所述:</p><p> 1.給取目的文件夾(所有圖片將被復制到這
70、個文件夾)下的所有已存在的圖片名稱,并放入Arraylist內(nèi)。</p><p> 2.將ArrayList內(nèi)的圖片名稱從小到大進行排序。</p><p> 3.在圖片被復制到目的文件夾之前,首先跟ArrayList內(nèi)的圖片名稱一一對比,如果發(fā)現(xiàn)同名文件,則在文件名后加“-”號和數(shù)字“1”。把更改后的名稱繼續(xù)跟ArrayList內(nèi)的下一個圖片名稱進行對比,如果重名,則把數(shù)字“1”變?yōu)椤?/p>
71、2”。直到在ArrayList內(nèi)找到比它大的名稱,則把它插入到這個位置。</p><p> 4.將圖片復制到目的文件夾,對下一張圖片重復第③步操作,直到所有圖片被復制到目的文件夾為止。</p><p> 5.1.8 MainForm.cs窗體</p><p> 雙擊(新增目錄)工具按鈕,生成按鈕的單擊事件,這里使用模式窗體的方式打開前面所創(chuàng)建的FrmCreat
72、eFolder窗體。</p><p> 雙擊(刪除目錄)工具按鈕,生成按鈕的單擊事件</p><p> 雙擊(導入圖像)工具按鈕,生成按鈕的單擊事件</p><p> 選中l(wèi)vView控件,在事件窗口中雙擊DrawItem事件,生成一個繪制項的事件,當ListView的OwnerDraw屬性為true時,可以通過DrawItem事件手動繪制ListView中的
73、每一個項。在DrawItem事件方法中,參數(shù)e的Bounds屬性返回這個項所占用的矩形,可以在這個矩形里繪制圖形和文字。</p><p> 選中列表框lstFolder,為它生成一個SelectedIndexChanged事件</p><p> 為(刪除圖像)和(退出)工具按鈕分別生成單擊(Click)事件 </p><p> 選中l(wèi)vView控件,在事件窗口
74、中雙擊DoubleClick事件,生成一個事件 </p><p> 分別雙擊窗體下方工具欄的(返回目錄)、(上一幅圖像)(tsbtnPeriod)、(下一幅圖像)(tsBtnNext)工具按鈕,為它們生成相應(yīng)的單擊事件</p><p> 顯示圖像有兩種模式:</p><p> 1 .按原圖尺寸顯示:當圖像尺寸大于裝載它的容器(panell)時,則顯示圖像的中間
75、部分。</p><p> 2 .顯示全圖:當圖像尺寸大于裝載它的容器時,則按比例對原圖進行縮放,以適合容器大小。當圖像尺寸小于裝載它的容器時,則在容器中央顯示原圖。</p><p> 自定義方法MatchImage()正是用于計算圖像的顯示尺寸,以對PictureBox控件尺寸進行調(diào)整并正確地顯示圖像。</p><p> 雙擊(自動播放)(tsbtnAutoP
76、lay)按鈕,生成一個按鈕的單擊事件。雙擊timerl控件,生成一個定時器事件。選中工具欄上的組合框(tscbInterval)控件,并為它生成一個SelectedIndexChanged事件</p><p> 同時選中(實際大?。?tsbtnNormal)和(合適大?。?tsbtnMatch)兩個工具按鈕控件,打開事件窗口,在Click事件內(nèi)輸入“tsbtnShowMode_Click”后按Enter鍵,為兩
77、個按鈕生成一個共同的單擊事件</p><p> 選中pbPic控件,并分別為它生成MouseDown、MouseMove、MorseUp三個事件。</p><p> 當圖像處于實際大小狀態(tài)時,如果原圖尺寸大于裝載它的容器的尺寸時,圖像無法顯示完全,這時應(yīng)該允許用鼠標拖動圖像以瀏覽圖像的任何部分。實現(xiàn)圖像拖動功能需要使用三個事件。</p><p> 1.按下鼠標
78、左鍵時,設(shè)置一個標志(isDraging),表明允許圖像被拖動,并記錄但是鼠標和PictureBox所處的位置,以方便后面拖動圖像時計算圖像位置。</p><p> 2.松開鼠標左鍵時,設(shè)置標志(isDraging),表明圖像不允許被拖動。</p><p> 3.移動鼠標時,判斷標志(isDraging),如果標志的值為真,表明鼠標左鍵還處于被按下狀態(tài),這時可以拖動圖像。如果標志的值為
79、假,則表明鼠標左鍵已經(jīng)不處于被按下狀態(tài),這時不能拖動圖像。</p><p> 拖動圖像的功能通過改變PictureBox的位置來實現(xiàn),需要注意一下幾點問題。</p><p> 1.如果裝載圖像的容器大于圖像尺寸,則不允許拖動圖像;</p><p> 2.當圖像的寬小于容器的寬,而圖像的高大于容器的高時,只允許垂直拖動圖像。</p><p&g
80、t; 3.當圖像的高小于容器的高,而圖像的寬大于容器的寬時,只允許水平拖動圖像。</p><p> 4.當圖像左邊界到達容器左邊界時,不允許再向右拖動圖像。 5.當圖像右邊界到達容器右邊界時,不允許再向左拖動圖像。</p><p> 6.當圖像上邊界到達容器上邊界時,不允許再向下拖動圖像。</p><p> 7.當圖
81、像下邊界到達容器下邊界時,不允許再向上拖動圖像。 </p><p> 5.2關(guān)鍵技術(shù)介紹 </p><p> 圖片瀏覽器難點在于縮略圖的顯示,如果一個目錄中有很多圖片,而每張圖片的尺寸都比較大,把每張圖片都縮小并顯示出來需要花費很長的時間,這樣會導致應(yīng)用程序的假死現(xiàn)象(在沒有完成某項工作之前,應(yīng)用程序無法進行其他操作)。處理這個問題可以采取多線程的方法,把顯示縮略圖的過程放在一個線程內(nèi)
82、,這樣在顯示縮略圖的過程中可以進行其他操作。另外一種解決方法是給每張圖片生成一張縮略圖,并存放于數(shù)據(jù)庫中,在瀏覽縮略圖時,直接從數(shù)據(jù)庫中讀取縮略圖并顯示。由于縮略圖非常小,并且是未經(jīng)壓縮的格式,讀取速度非??欤@樣就能以很快的速度顯示完所有圖片的縮略圖。</p><p> 本次設(shè)計另辟蹊徑,以達到類似效果。在導入圖片的同時,為圖片生成100*100 </p><p> 像素的bmp格式
83、的縮略圖(如果原圖的長和寬都小于100像素,則按原圖尺寸生成縮略圖),把原圖和縮略圖分別存放于兩個目錄內(nèi),并一一對應(yīng)。通過原圖的文件名可以找到相對應(yīng)的縮略圖,如果縮略圖不存在,則即時生成相應(yīng)的縮略圖。實踐證明,這樣做的效果令人滿意,能比較順暢的現(xiàn)實多張圖片的縮略圖。</p><p><b> 第6章 測 試 </b></p><p> 6.1軟件測試的目的和方法&
84、lt;/p><p> 軟件測試的目的,第一是確認軟件的質(zhì)量,其一方面是確認軟件做了你所期望做的事情,另一方面是確認軟件以正確的方式來做了這個事情。第二是提供信息,比如提供給開發(fā)人員或程序經(jīng)理的回饋信息,為風險評估所準備的信息。第三軟件測試不僅是在測試軟件軟件產(chǎn)品本身,而且還包括軟件開發(fā)的過程。如果一個軟件產(chǎn)品開發(fā)完成之后發(fā)現(xiàn)了很多問題,這說明此軟件開發(fā)過程很可能是有缺陷的。因此,軟件測試的第三個目的是保證整個軟件開
85、發(fā)過程是高質(zhì)量的。</p><p> 軟件測試的目的在于看是否本次設(shè)計是否成功,所要求的功能能否實現(xiàn)~以便于發(fā)現(xiàn)未實現(xiàn)的功能,或者是代碼編寫時的錯誤導致程序無法運行!軟件測試時每個軟件設(shè)計很重要的一部分所以不能忽視??!</p><p> 1. 功能測試:驗證測試軟件功能能否正常按照它的設(shè)計工作。看運行軟件時的期望行為是否符合原設(shè)計。</p><p> 2.可接
86、受性測試:是在把測試的版本交付測試部門大范圍測試以前進行的對最基本功能的簡單測試。因為在把測試的版本交付測試部門大范圍測試以前應(yīng)該先驗證該版本對于所測試的功能基本上比較穩(wěn)定。必須滿足一些最低要求,比如不會很容易程序就掛起或崩潰。如果一個軟件沒通過可測試性的驗證,就應(yīng)該花時間在該測試版本上測試,同時還要找到造成該版本不穩(wěn)定的主要缺陷并督促盡快加以修正。</p><p> 3. 用戶界面測試:分析軟件用戶界面的設(shè)計
87、是否合乎用戶期望或要求。它常常包括菜單,對話框及對話框上所有按鈕,文字,出錯提示,幫助信息等方面的測試。</p><p> 6.2 軟件測試的步驟</p><p> 在進行總體詳細設(shè)計的時候,可以每一步都運行程序,但由于各部分代碼息息相關(guān)。在調(diào)試程序某項功能時有可能出錯,但應(yīng)該在做每一個步驟時盡量排除所有由于粗心所導致的語法錯誤,這樣就不至于在完成程序后發(fā)現(xiàn)過多錯誤而變得無所適從。&l
88、t;/p><p> 運行程序,嘗試單擊窗體中的每一個按鈕,查看相關(guān)功能是否實現(xiàn)。并認真觀察是哪些代碼實現(xiàn)了這些功能。</p><p> 第7章 總結(jié)與展望</p><p> 通過本次畢業(yè)設(shè)計,讓我對C#這一完全面向?qū)ο蟮恼Z言有了更加深刻的認識。本次設(shè)計讓我對我所學過的知識有了一個更加深刻的認識,而且更使我對學過的知識有一個更加系統(tǒng)和高度概括的認識。并且還涉及了一
89、些沒學過的知識,讓我們更加的對C#這一門語言有了更加深刻的求知欲!</p><p> 本次設(shè)計還有很多的功能可以研究設(shè)計,比如可以在瀏覽某張圖片時可以更改其詳情,對圖片進行順時針或逆時針旋轉(zhuǎn),可以在查看圖片縮略圖或瀏覽單張圖片時將一張或多張圖片導出到用戶指定的位置。可以多張照片同時修改名稱。</p><p> 圖片瀏覽器還可以有很多的不足,如:修改以后就無法再次修改圖片的名稱,可以加入
90、更加簡潔,更加人性化的設(shè)計!</p><p><b> 致 謝</b></p><p> 本人的畢業(yè)論文是在***導師的親切關(guān)懷和悉心指導下完成的。她嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,深深地感染和激勵著我。從課題的選擇到項目的最終完成,***導師都始終給予我細心的指導和不懈的支持。在此謹向***導師致以誠摯的謝意和崇高的敬意。</p&
91、gt;<p> 在此,我還要感謝在一起愉快的度過大學生活的每個可愛的同學們和尊敬的老師們,正是由于你們的幫助和支持,我才能克服一個一個的困難和疑惑,直至本文的順利完成。</p><p> 在論文即將完成之際,我的心情無法平靜,從開始進入課題到論文的順利完成,有多少可敬的師長、同學、朋友給了我無言的幫助,在這里請接受我誠摯的謝意!謝謝你們!</p><p> 在我即將完成
92、學業(yè)之際,我深深地感謝我的家人給予我的全力支持!</p><p> 最后,衷心地感謝在百忙之中評閱論文和參加答辯的各位專家、教授!</p><p><b> 附錄1</b></p><p> 這是新增目錄時的界面,輸入要新增的目錄的名稱!如圖8—1</p><p><b> 圖8—1</b>
93、</p><p> 這是刪除目錄的界面,刪除目錄將導致目錄下的圖片一起被刪除!如圖8—2</p><p><b> 圖8—2</b></p><p> 單獨顯示一張圖片的界面,可以進行返回目錄、前一張、后一張、最大化等操作。如圖8—3</p><p><b> 圖8—3</b></p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文-瀏覽器開發(fā)
- 圖片瀏覽器課程設(shè)計報告
- 多功能圖像瀏覽器制作畢業(yè)論文
- 圖片瀏覽器課程設(shè)計報告
- 基于MFC的圖片瀏覽器的設(shè)計與實現(xiàn).pdf
- 圖片瀏覽器課程設(shè)計報告.doc
- 圖片瀏覽器課程設(shè)計報告(vb)
- 網(wǎng)絡(luò)編程課程設(shè)計報告--圖片瀏覽器
- 多平臺圖片瀏覽器的設(shè)計與實現(xiàn).pdf
- 基于java的瀏覽器的設(shè)計
- Android平臺圖片瀏覽器的設(shè)計與實現(xiàn).pdf
- java瀏覽器課程設(shè)計--web瀏覽器開發(fā)
- vb課程設(shè)計實驗報告---圖片瀏覽器
- 數(shù)碼相框圖片瀏覽器設(shè)計與實現(xiàn).pdf
- 基于JAVA的瀏覽器的設(shè)計.doc
- vb課程設(shè)計實驗報告---圖片瀏覽器
- 基于c#聊天群的編程畢業(yè)論文
- 畢業(yè)論文--基于c#人事管理系統(tǒng)設(shè)計
- Android平臺下基于OpenGL ES的圖片瀏覽器的設(shè)計與實現(xiàn).pdf
- 畢業(yè)論文-c#聊天系統(tǒng)
評論
0/150
提交評論