建立 C# 應用程式
[[academy-video-youtube({"vid": "0zLZQesgV5o", "start_time": "0", "title": "Creating a C# Application", "creator": "Tim Corey", "length": "1h 35m"})]]
Windows Forms App是Microsoft .NET Framework的一部分圖形使用者介面API。 它提供了一個平台,用以建立豐富的桌面應用程式,Tim Corey 的".NET 6中的Windows Forms介紹"影片為使用此技術構建應用程式提供了全面的介紹。 下面是一個由Tim的影片啟發的深入概念介紹。
從Windows Forms開始
Tim Corey 透過設置一個新的.NET 6 Windows Forms專案開始他的教學。起始包含在Visual Studio中建立新專案,選擇適當的模板,並最終設置初始表單(Form1)。 這對初學者理解如何啟動一個專案並讓他們的第一個表單運行是至關重要的。
設置專案:
Tim 逐步講解在Visual Studio中建立新專案的過程,強調選擇正確的Windows Forms應用模板和配置的重要性。 這包括選擇型別"Windows Forms App",妥善命名專案(這裡命名為"WinFormsDemoApp"),並選擇.NET 6.0作為目標框架(2:05)。

在專案窗口出現後點擊建立,您將會在程式碼編輯器左側的解決方案總管窗口中找到一個包含所有模板文件的預設Windows表單。 預設表單基於基本的Windows使用者介面結構,具有包含Windows Forms應用程式標題與最小化、最大化和關閉按鈕控制的標題欄。

快速應用程式開發與Windows Forms
Tim在他的影片中探討使用Windows Forms的快速應用程式開發 (RAD) 概念,強調其在建立原型和概念驗證方面的便利性和效率。
了解快速應用程式開發
Tim首先討論了RAD的概念,重點在於快速開發應用以驗證想法和功能。
建立概念證明
使用工具箱窗口:Tim展示了開發人員如何利用包含多種應用開發基本控制的Visual Studio工具箱窗口。
- 拖放功能:他演示如何透過拖放新增控制項到設計介面,如按鈕、文字框、標籤和檢查框。
構建基本應用程式
佈局和設計:Tim解釋了如何排列控制項,使用Visual Studio的對齊指南來對齊它們的靈活性。
- 控制項的複製和粘貼:他展示如何利用快捷鍵如Ctrl+C和Ctrl+V迅速復制控制項以簡化設計過程。
功能元件
配置控制項:Tim以進度條為例展示如何在屬性窗口中直接調整屬性來配置控制項。 這種互動演示了對應用視覺組件的實時更改。
- 互動式預覽:通過運行應用程式,Tim展現了即使這些基本元件的功能尚未完全實現,它們也可以互動使用。

設計器損壞錯誤
Tim Corey解釋了Windows Forms設計器可能出現損壞的各種方式以及開發人員通常如何遇到這個問題。
意外修改:如果開發人員不小心刪除或修改了Form1.Designer.cs中的關鍵自動生成程式碼,如事件處理或控制初始化程式碼,可能導致設計器失敗。
- 不一致的程式碼更改:當手動編輯程式碼與設計器生成的程式碼之間存在差異時可能會出現錯誤。 例如,在一個部分類(Form1.cs)中刪除事件處理程式但在另一個(Form1.Designer.cs)中未刪除,可能導致不匹配而使表單在設計器中無法正確載入。
閱讀錯誤訊息
Tim Corey強調在處理與Windows Forms設計師相關問題時,仔細解讀Visual Studio提供的錯誤訊息的重要性。
錯誤訊息詳情:Tim舉出特定錯誤訊息,如"設計器無法處理第153行的未知名稱'form1_load'",這指出設計師遇到問題的位置和原因。
- 解決指引:錯誤訊息通常提供可操作的步驟,如還原所做的程式碼更改或確保所有部分類(Form1.cs和Form1.Designer.cs)一致。
也從其它部分類中刪除事件處理程式
Tim展示了一個解決由於部分類的不一致事件處理程式修改所致設計師問題的實際解決方案。
範例場景:他解釋如何在一個部分類(Form1.cs)中刪除事件處理程式(Form1_Load)但不在另一個(Form1.Designer.cs)中刪除,可能干擾設計師正確載入表單。
- 統一修改:通過確保在兩個部分類中均應用所有修改,開發人員能夠有效恢復Windows Forms設計師的功能,而無需採取如重啟Visual Studio或重新建立專案等激進措施。
處理Windows Forms中的其他事件
1. 事件處理機制
Tim解釋了Windows Forms中的事件處理機制。 使用Windows Forms設計師時,Tim指出雙擊一個控件,像是表單本身,會為該控件生成一個預設的事件處理程式。 例如,雙擊表單會建立一個Load事件處理程式。 Tim警告開發人員如果刪除處理程式內的程式碼而不移除事件處理程式本身,會損害表單在設計器中的渲染。 這是因為設計師將視覺佈局轉化為程式碼,這對於表單在運行時正確渲染是必需的。
2. 理解表單為一個類
Tim闡述Windows Forms本質上是從Form繼承的類,提供了表單佈局、窗口管理(最小化、最大化、關閉按鈕)、調整大小能力等功能。 根據Tim的說法,這種繼承允許開發人員利用預構建的UI組件(Button, TextBox, Label等)並透過修改他們的屬性和方法來操作它們。
3. 屬性的操作
在29:16的影片中,Tim Corey演示如何在Windows Forms中,Visual Studio的屬性窗口中可見的屬性使開發人員能夠配置像標籤(文字屬性)、按鈕(文字屬性、Click事件)和進度條(值屬性)等視覺元素。 Tim強調這些屬性可以在設計時和運行時修改,從而影響控件在表單上的行為和外觀。
4. 建立多個實例
Tim解釋,Windows Forms中的每個表單(Form1,Form2等)都是一個類(Form)的一個實例。 通過動態地建立多個實例,開發人員可以有效地管理應用內的多個窗口。 Tim建議這種能力促進了快速應用程式開發(RAD),允許快速設計、定製和互連表單以構建複雜的使用者介面。
5. 應用啟動配置
Program.cs中的Application.Run(new Form1())確定應用的起始點。 Tim強調更改此啟動表單改變了當使用者啟動應用時顯示的初始視圖,影響應用的流程和使用者體驗。
Windows Forms中的選單和工具欄
Tim展示了WinForms的多功能性,展示了選單和工具欄。 他解釋了如何在表單中輕鬆地新增和定制這些元素。 以下是Tim涵蓋的關鍵點:
新增狀態欄
Tim Corey展示如何通過向表單中新增StatusStrip控制來增強使用者互動。 此控制包含像ToolStripStatusLabel之類的元件。 通過在Visual Studio中利用拖放功能,開發人員可以快速將這些元素融合到顯示動態資訊中,如任務過程中的進度更新或狀態資訊。
定製選單條
Corey強調在為Windows Forms應用設計選單條(MenuStrip)時遵循Windows標準的重要性。 他解釋如何使用符號(&)來指定鍵盤快捷鍵並對下劃線(_)進行存取,確保使用者可以使用鍵盤命令導航選單。 例如,將&File與&Exit設定為下劃線E,使得使用者可以在不依賴滑鼠交互的情況下快速存取並執行指令。
建立子選單和事件
Corey展示如何在MenuStrip下建立子選單並將事件關聯到選單項。 透過雙擊選單項,開發人員可以生成事件處理程式並實現如顯示資訊(this.Close())等功能。 他強調採用正確的命名習慣和最佳實踐以維持程式碼的可讀性和可擴展性的重要性。

Tim Corey的最佳實踐和提示
Tim Corey強調以將預設表單(Form1)重命名為更具意義的名稱如MainForm(1:02:01)來正確開始WinForms專案。 這個簡單的步驟確保整個專案中的一致性,無縫地在程式碼庫中更新引用。
自訂表單屬性
接下來,Tim強調早期自訂表單屬性的重要性。 調整表單本身的文字屬性以反映其目的(例如"Main Form by Tim Corey")有助於提高Visual Studio環境中的清晰度和組織性。 另外,適當地設置字體大小(通常約14-18點)和表單大小(寬度和高度)確保可閱讀性而不扭曲其他控制項的佈局。
管理控制項屬性
Corey指出在控件加入後改變整個表單設置時預設控件屬性的陷阱。 然後他在表單中新增標籤、文字框和按鈕,顯示它們自動採用了為表單選擇的字體大小。 他展示如何修改字體大小影響所有控件,並敦促開發人員早期設定這些設置以避免遲後出現無意的佈局更改。 如果您為每個控制項更改屬性值,那麼它就不會採用表單的預設值(1:06:33)。
控制項的命名規範
Tim影片中的一個主要收穫是使用有意義的控制項命名規範。 Corey主張使用小駝峰命名變數(firstNameLabel, firstNameTextBox),並在名稱末尾加上控件名,而不是傳統的"lblFirstName"或"txtFirstName"。
事件處理和命名規範
Tim提倡的一個顯著的做法是統一命名控件和事件處理。 藉由從一開始就直觀命名控件(像sayHelloButton, firstNameTextBox),開發人員簡化了事件處理。 這種方法在處理跨表單的多個事件時防止混淆並加強維護性。
他通過展示妥善命名按鈕與放任它們為預設名稱(如button1、button2等),這種方法符合現代程式碼實踐,使快速搜尋和增強了可讀性,易於一目了然理解每個控件的用途。
實施制檯順序和無障礙存取
另一個涵蓋的關鍵方面是設定控制項的Tab順序。 Tim解釋如何使用TabIndex屬性確保使用者可以邏輯地使用Tab鍵瀏覽存取表單。 這不僅增強了使用者體驗,還提升了依賴鍵盤導航的使用者的存取性。
在表單間傳遞資料
在WinForms的能力上擴展,Tim談到了在多個表單間傳遞資料。 他展示如何在表單中定義構造函数以促進資料交換。 這項技術使開發人員能夠以特定資料初始化新表單,增強應用設計的靈活性。
結論
Tim Corey的.NET 6 Windows Forms 教程是任何想學習使用C#進行桌面應用程式開發的人都十分有價值的資源。 該影片涵蓋了一個從基本設置到高級控制和最佳實踐的廣泛主題,為建立專業的Windows Forms C#應用程式提供了扎實的基礎。
想瞭解更多具有更多上下文和額外實戰編碼範例的詳細介紹,您可以在這裡觀看Tim Corey的完整教學影片。

