--- tags: 視窗程式設計 --- # 視窗應用程式介紹 各位同學大家好,我們這學期視窗應用程式設計課程,主要利用 Visual Studio Communuity 2019 與 C# 程式語言,幫助同學學習建立基本的 ==**「視窗應用程式」**(以後我們會簡稱它**視窗程式**)==,我們預計的主題包括: * C# 程式語言回顧 * 建立簡單計算機程式 * 檔案處理程式 * 資料庫連接與查詢程式 我們預計學期末同學可以具備以下能力: * 基本視窗應用程式的建置能力 * 加強 C# 語言能力 * 資料庫程式設計基礎 # 為什麼要學習視窗應用程式? 現在其實很多程式應用都會以 Web 網頁方式來設計使用者介面,工具有很多,從最簡單的 HTML 表單到複雜的網頁框架都有(例如:React.js、Vue.js 等)。 但是視窗應用程式有不少公司內部的系統仍然會用到,尤其更重視安全性的公司,可能 ERP 系統都還是單機版應用程式。如果公司開發單機的應用軟體,也一定是要寫視窗程式,而且只要微軟繼續開發 Windows 作業系統,視窗程式永遠都會存在。 :::info Windows 至少這十幾年內都會存在,除非,大家都不用個人電腦了,這種可能性太低了 ::: # .NET Framework 基本介紹 .NET Framework的介紹其實[維基百科](https://zh.wikipedia.org/zh-tw/.NET%E6%A1%86%E6%9E%B6)就有 ... > .NET Framework是由微軟開發,一個致力於敏捷軟體開發(agile software development)、快速應用開發(rapid application development)、平臺獨立性和網路透明化的軟體框架。.NET是微軟為2000年代對伺服器和桌上型軟體工程邁出的第一步。.NET包含許多有助於網際網路和內部網套用迅捷發的技術。 > > .NET Framework是微軟公司繼Windows DNA之後的新發平台,採用系統虛擬機器運行,以通用語言運行庫(Common Language Runtime)為基礎,支援多種語言(C#、F#、VB.NET、C++、Python等)的開發。 > >.NET也為應用程式介面(API)提供了新功能和發工具。這些革新使得程式設計員可以同時進行Windows應用軟體和網路應用軟體以及元件和服務(web服務)的開發。.NET提供了一個新的反射性的且物件導向程式設計編程介面。.NET設計得足夠通用化從而使許多不同高階語言都得以被匯集。 以上會不會看不懂?看不懂很正常,畢竟如果你程式語言寫得不多,也大概很難理解上面在說甚麼? 簡單來說,如果你要設計一個電腦軟體,無論用甚麼程式語言,必須要可以把寫好的程式轉成作業系統可以跑的執行檔(這個動作叫「編譯」)。但是作業系統很多種,你設計的軟體不一定能在不同的作業系統執行。不同的程式語言,也不見得可以「編譯」成任何一種作業系統可以執行的軟體。 所以假如你寫「某個 A 程式語言」的程式,必須確定這個程式要執行的作業系統,具有 A 程式語言可以執行的環境。換句話說,這個 A 程式語言寫好的程式,它不一定可以「跨平台」。 .NET Framework 就是一個微軟提出的「跨平台」程式開發平台,只要是 .NET Framework 支援的程式語言 ![](https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Overview_of_the_Common_Language_Infrastructure.svg/1024px-Overview_of_the_Common_Language_Infrastructure.svg.png =600x) # 視窗應用程式開發技術 目前比較常見的視窗應用程式開發技術大概就這幾種: * Windows Form * Windows Presentation Foundation (WPF) * Python (搭配套件:Tkinter、PyQt等等) ## Windows Form ==不要問老師為什麼沒有中文翻譯,因為我還真的沒看到有誰在翻譯這個。:joy:== 早期要開發視窗程式,其實有點麻煩,因為你需要瞭解微軟作業系統(也就是我們熟悉的 Windows)的系統底層,要知道作業系統是怎麼「畫」出使用者介面(User Interface, UI)。 換句話說,你不只是要寫你的程式邏輯,可能是要處理檔案、查詢資料庫的資料、等等,還得想怎麼把資料呈現在螢幕上面。這樣開發的時間會很長,而且可能因為 UI 設計問題搞很久,真正需要好好寫程式邏輯的部分就很難兼顧。 所以,微軟幫你想好一個辦法,他把常見的 UI 介面整理起來,然後幫你做好工具來控制,你只要大概拉一拉你需要的視窗介面,剩下就只是設定好基本的操作邏輯,然後加上程式邏輯就可以很快的做出一個軟體。 ![](https://i.imgur.com/4Szg2En.png) 像以上的視窗畫面,你只要大概拉一拉就可以做好一個簡單介面 ## Windows Presentation Foundation (WPF) 同樣的,我也不知道這個中文翻譯是什麼? 前面所說的 Windows Form 歷史很悠久,至少 2002 年開始就有這樣的開發工具可以使用,雖然可以很快速的開發軟體,但如果你要自訂它的介面很麻煩。 所以後來微軟在 2006 年提出了 WPF,它使用 .NET Framework 3.0 及以後版本,基於 XML、.NET Framework、向量繪圖技術的開發框架,微軟視其為下一代使用者介面技術。 和之前的 Windows Form 最大的差別在於:介面可以直接使用 XAML(其實就是 XML)來設計,只要美術設計師知道怎麼用 XML 設計介面,就能設計各種漂亮的 UI,程式設計師也可以專心在程式邏輯上的設計。 :::info 簡單來說:Web 開發常見到的 RWD 設計方式,在視窗上的 RWD 就可以用 WPF 來達到,同樣的也能給視窗程式增加漂亮的動畫與界面設計 ::: ![](https://i.imgur.com/ffstmZy.jpg) WPF 技術可以讓你做到以上這種介面 ## Python (搭配套件:Tkinter、PyQt等等) 其實這幾年因為 Python 這個語言相當流行,尤其在 AI 人工大數據領域等於是必學,但其實 Python 可以做的事情很多,包括建立視窗程式。 ![](https://repository-images.githubusercontent.com/69418106/81ab67af-a916-467e-9e9c-7acdc662680e) Python 要建立視窗程式主要透過套件,例如 Tkinter、PyQt 等,這些套件仍然還在發展中,並且還沒有哪一個套件成為主流。 並且各位同學一年級都至少學過 C++ 或 C#,如果要用 Python 製作視窗程式,還得學 Python,為了減少同學負擔,我們課程會以微軟的 WPF 為主。 同學要是之後有學習 Python,又需要建立簡單的視窗介面供使用者使用,雖然你也可以用 Winform 或 WPF 來跑 Python 程式,不過 Tkinter、PyQt 等套件你也可以參考使用。如果你想要學習 PyQt,可以參考這個[STEAM 教育學習網](https://steam.oxxostudio.tw/category/python/index.html) # 業界有沒有需要視窗應用程式人才? :::info 先講答案:一定有! ::: 例如你可以搜尋 [104 人力銀行網站](https://www.104.com.tw/jobs/search/?ro=0&keyword=WPF%20WinForm&expansionType=job&order=1&asc=0&page=1&mode=s&jobsource=2018indexpoc&langFlag=0&langStatus=0&recommendJob=1&hotJob=1),至少都有 300 筆以上的資料,代表仍然都有相當的人力需求。 雖然需求沒有像網頁前端、後端那麼多,但始終都是穩定的需求,如果同學願意繼續學習,你在視窗應用程式的知識,部分都能運用到網頁前端技術、行動裝置 App 開發、甚至是遊戲設計上。 老師自己第一份工作其實也是視窗應用程式最多,在這領域上學到的東西,其實在很多領域都用的著。 前面也曾說過,在一些講究資訊安全、系統穩定的公司,公司內部系統不見得是 Web-Based 的,可能會以視窗應用程式為主要的系統架構。另外 WPF 技術其實國外比台灣更受歡迎,外資企業可能更重視像這樣的視窗應用程式技術,同學若有志於外資企業或者出國深造,瞭解這樣的技術對你來說一定有很大幫助。 最後,視窗程式也只是眾多 UI 程式的一種,背後的程式邏輯其實更為重要,因為那代表著某個業界領域的資訊處理與管理的流程 Know-How,假如同學未來想在資訊系統開發有一定的能力基礎,只要先熟習一種 UI 程式的設計,之後要轉到別的領域都不會太難。 # 熟悉 Visual Studio 與 C# 就算你對視窗應用程式開發興趣不高,但是只要是微軟的產品,C# 就是主要的開發語言,你也可以藉由學習本課程對 C# 有進一步的認識。 Unity 遊戲引擎主要語言也是 C#,對 C# 夠熟悉也能越來越了解遊戲程式開發。 這幾年 Visual Studio 也結合生成式 AI,換句話說越來越方便的 GitHub Copilot 已經逐漸成為開發應用程式的重要輔助,我們也希望藉由這個課程讓同學慢慢認識如何使用生成式 AI,幫助同學學習程式語言與開發應用程式。