Tworzenie aplikacji w języku C#
Windows Forms App to API graficznego interfejsu użytkownika, dołączonego jako część Microsoft .NET Framework. Zapewnia platformę do tworzenia zaawansowanych aplikacji desktopowych, a film Tima Coreya o "Intro to Windows Forms in .NET 6" oferuje kompleksowe wprowadzenie do budowania aplikacji przy użyciu tej technologii. Poniżej znajduje się szczegółowe spojrzenie na koncepcje omówione w filmie, zainspirowane filmem Tima.
Rozpoczęcie pracy z Windows Forms
Tim Corey rozpoczyna swój samouczek od rozpoczęcia nowego projektu Windows Forms w .NET 6. Punkt startowy obejmuje stworzenie nowego projektu w Visual Studio poprzez wybranie 'create', następnie wybranie odpowiednich szablonów, a na końcu ustawienie początkowej formy (Form1). To jest kluczowe dla początkujących, aby zrozumieć, jak zacząć projekt i uruchomić swoją pierwszą formę.
Ustawienie projektu:
Tim przeprowadza przez proces tworzenia nowego projektu w Visual Studio, podkreślając znaczenie wyboru odpowiednich szablonów i konfiguracji dla aplikacji Windows Forms. To obejmuje wybranie typu "Windows Forms App", odpowiednie nazwazenie projektu, w tym przypadku "WinFormsDemoApp", oraz wybór .NET 6.0 jako docelowego frameworku (2:05).

Po kliknięciu 'create', kiedy okno projektu się pojawi, znajdziesz domyślną formę Windows wraz ze wszystkimi plikami szablonu w oknie explorer rozwiązania po lewej stronie edytora kodu. Domyślna forma opiera się na podstawowej strukturze interfejsu użytkownika Windows, z paskiem tytułu zawierającym tytuł aplikacji Windows Forms oraz kontrolki minimalizacji, maksymalizacji i zamykania.

Szybki rozwój aplikacji z Windows Forms
Tim w swoim filmie omawia koncept Rapid Application Development (RAD) używając Windows Forms, podkreślając łatwość i wydajność tworzenia prototypów i dowodów konceptu.
Zrozumienie Rapid Application Development
Tim rozpoczyna od omówienia koncepcji RAD, która skupia się na szybkim rozwoju aplikacji w celu weryfikacji pomysłów i funkcjonalności.
Tworzenie dowodu konceptu
-
Używanie okna Toolbox: Tim demonstruje, jak deweloperzy mogą wykorzystać okno Toolbox w Visual Studio, które zawiera różne kontrolki niezbędne do rozwoju aplikacji.
- Funkcjonalność przeciągania i upuszczania: Ilustruje proces dodawania kontrolek poprzez przyciąganie i upuszczanie na powierzchnię projektu, jak przyciski, pola tekstowe, etykiety i pola wyboru.
Budowanie podstawowej aplikacji
-
Układ i projekt: Tim wyjaśnia elastyczność rozmieszczania kontrolek na formie, wyrównując je przy użyciu przewodników wyrównania Visual Studio.
- Kopiowanie i wklejanie kontrolek: Pokazuje, jak deweloperzy mogą szybko duplikówać kontrolki, używając skrótów klawiaturowych, takich jak Ctrl+C i Ctrl+V, usprawniając proces projektowy.
Elementy funkcjonalne
-
Konfiguracja kontrolek: Tim przykładowo konfiguruje kontrolki, takie jak pasek postępu, poprzez dostosowanie własności bezpośrednio w oknie właściwości. Ta interakcja demonstruje zmiany w czasie rzeczywistym w wizualnych komponentach aplikacji.
- Interaktywna podgląd: Uruchamiając aplikację, Tim pokazuje, jak te podstawowe komponenty mogą być używane interaktywnie, nawet jeśli ich funkcjonalność nie jest jeszcze w pełni zaimplementowana.

Błąd Designer Broke
Tim Corey wyjaśnia różne sposoby, w jakie projektant Windows Forms może zostać uszkodzony oraz jak deweloperzy zazwyczaj napotykają ten problem.
-
Niespodziewane modyfikacje: Jeśli deweloperzy przypadkowo usuną lub zmodyfikują kluczowe części automatycznie generowanego kodu w Form1.Designer.cs, takie jak obsługa zdarzeń lub inicjalizacja kontrolek, może to spowodować, że projektant przestanie działać.
- Niespójne zmiany w kodzie: Błędy mogą powstać, gdy występują rozbieżności między ręcznie edytowanym kodem a kodem generowanym przez projektanta. Na przykład, usunięcie obsługi zdarzenia w jednej klasie częściowej (Form1.cs), ale nie w drugiej (Form1.Designer.cs), może prowadzić do niezgodności, która uniemożliwia prawidłowe załadowanie formy w projektancie.
Czytanie komunikatów o błędach
Tim Corey podkreśla znaczenie starannego interpretowania komunikatów o błędach dostarczonych przez Visual Studio przy rozwiązywaniu problemów związanych z projektantem Windows Forms.
-
Szczegóły komunikatu o błędzie: Tim zwraca uwagę na specyficzne komunikaty o błędach, takie jak "Projektant nie mógł przetworzyć nieznanej nazwy 'form1_load' w linii 153", które wskazują, gdzie i dłączego projektant napotkał problem.
- Wskazówki dotyczące rozwiązania: Komunikaty o błędach często zapewniają akcjonalne kroki, takie jak przywrócenie zmian wprowadzonych do generowanego kodu lub zapewnienie spójności we wszystkich klasach częściowych (Form1.cs i Form1.Designer.cs).
Usunięcie obsługi zdarzenia z innej klasy częściowej także
Tim pokazuje praktyczne rozwiązanie do usuwania problemów projektanta spowodowanych niespójną modyfikacją obsługi zdarzeń w różnych klasach częściowych formy.
-
Przykładowy scenariusz: Wyjaśnia, jak usunięcie obsługi zdarzenia (Form1_Load) w jednej częściowej klasie (Form1.cs) lecz nie w drugiej (Form1.Designer.cs) może zakłócić zdolność projektanta do prawidłowego ładowania formy.
- Jednolite modyfikacje: Zapewniając, że wszystkie modyfikacje są stosowane konsekwentnie we wszystkich klasach częściowych, deweloperzy mogą skutecznie przywrócić funkcjonalność do projektanta Windows Forms bez uciekania się do drastycznych środków, takich jak restarting Visual Studio lub odtwarzanie projektu.
Obsługa innych zdarzeń w Windows Forms
1. Mechanizm obsługi zdarzeń
Tim wyjaśnia mechanizm obsługi zdarzeń w Windows Forms. Kiedy używasz projektanta Windows Forms, Tim zauważa, że podwójne kliknięcie na kontrolce, takiej jak forma sama w sobie, generuje domyślną obsługę zdarzeń dla tej kontrolki. Na przykład, podwójne kliknięcie na formie tworzy obsługę zdarzenia Load. Tim ostrzega, że jeśli deweloperzy usuną kod wewnątrz obsługi bez usuwania samej obsługi zdarzenia, to zakłóca renderowanie formy w projektancie. Dzieje się tak, ponieważ projektant tłumaczy układ wizualny na kod, który jest niezbędny do prawidłowego renderowania formy w czasie uruchamiania.
2. Zrozumienie formy jako klasy
Tim wyjaśnia, że Windows Forms to w zasadzie klasy dziedziczone z Form, które zapewniają funkcjonalności takie jak układ formy, zarządzanie oknami (przyciski minimalizacji, maksymalizacji, zamknięcia), możliwości zmiany rozmiaru i więcej. Według Tima, to dziedziczenie pozwala deweloperom korzystać z wcześniej zbudowanych komponentów UI (Button, TextBox, Label itp.) oraz manipulowanie nimi poprzez modyfikację ich właściwości i metod.
3. Manipulowanie właściwościami
W wideo o godz. 29:16, Tim Corey pokazuje, jak właściwości w Windows Forms, widoczne w oknie Właściwości Visual Studio, umożliwiają deweloperom konfigurowanie elementów wizualnych takich jak etykiety (właściwość Text), przyciski (właściwość Text, zdarzenie Click) oraz paski postępu (właściwość Value). Tim podkreśla, że te właściwości mogą być modyfikowane zarówno w czasie projektowania, jak i w czasie uruchamiania, wpływając na sposób zachowania się kontrolek oraz ich wygląd na formie.
4. Tworzenie wielu instancji
Tim wyjaśnia, że każda forma (Form1, Form2, itp.) w Windows Forms jest instancją klasy (Form). Tworząc wiele instancji dynamicznie, deweloperzy mogą skutecznie zarządzać wieloma oknami w aplikacji. Tim sugeruje, że ta zdolność ułatwia szybki rozwój aplikacji (RAD), pozwalając na szybkie projektowanie, dostosowywanie i łączenie form w celu stworzenia złożonych interfejsów użytkownika.
5. Konfiguracja startowa aplikacji
Metoda Main w Program.cs określa punkt startowy aplikacji poprzez określenie, która forma (Form1, Form2, itd.) ma zostać zainicjalizowana jako pierwsza przy użyciu Application.Run(new Form1()). Tim podkreśla, że zmiana tej formy startowej zmienia początkowy widok prezentowany użytkownikom po uruchomieniu aplikacji, wpływając na jej przepływ i doświadczenie użytkownika.
Menu i paski narzędzi w Windows Forms
Tim demonstruje wszechstronność WinForms poprzez pokazanie menu i pasków narzędzi. Wyjaśnia, jak łatwo jest dodać i dostosować te elementy w formie. Oto kluczowe punkty, które omawia Tim:
Dodawanie paska statusu
Tim Corey pokazuje, jak zwiększyć interakcję użytkownika poprzez dodanie kontrolki StatusStrip do formy. Ta kontrolka zawiera komponenty takie jak ToolStripProgressBar i ToolStripStatusLabel. Korzystając z funkcjonalności przeciągania i upuszczania w Visual Studio, deweloperzy mogą szybko dodawać te elementy, aby wyświetlać dynamiczne informacje, takie jak postępy zadań lub wiadomości o stanie.
Dostosowywanie pasków menu
Corey podkreśla znaczenie przestrzegania standardów Windows przy projektowaniu pasków menu (MenuStrip) dla aplikacji Windows Forms. Wyjaśnia, jak używać ampersanta (&) do wyznaczania skrótów klawiszowych i podkreśleń (_) dla dostępności, zapewniając użytkownikom możliwość nawigacji po menu za pomocą poleceń klawiaturowych. Na przykład, przypisanie &File z &Exit podkreślonym jako E pozwala użytkownikom szybko uzyskiwać dostęp i wykonywać polecenia bez polegania na interakcjach z myszą.
Tworzenie podmenu i zdarzeń
Corey ilustruje, jak tworzyć podmenu pod MenuStrip i powiązać zdarzenia z elementami menu. Poprzez podwójne kliknięcie na elementach menu, programiści mogą generować obsługę zdarzeń i implementować funkcje, takie jak wyświetlanie wiadomości (MessageBox) lub wykonywanie działań, takich jak zamknięcie aplikacji (this.Close()). Podkreśla znaczenie stosowania właściwych konwencji nazewnictwa i najlepszych praktyk dla utrzymania czytelności i skalowalności kodu.

Najlepsze praktyki i wskazówki od Tima Coreya
Tim Corey podkreśla rozpoczęcie projektu WinForms od poprawnego nazwania domyślnej formy (Form1) na bardziej znaczącą nazwę, np. MainForm (1:02:01). Ten prosty krok zapewnia spójność w całym projekcie, aktualizując odniesienia w całej bazie kodu bezproblemowo.
Dostosowywanie właściwości formy
Następnie Tim podkreśla znaczenie wstępnego dostosowania właściwości formy. Dostosowanie właściwości Text samej formy, aby odzwierciedlała jej cel (np. "Main Form by Tim Corey"), zwiększa przejrzystość i organizację w środowisku Visual Studio. Dodatkowo, ustawienie rozmiaru czcionki (zazwyczaj około 14-18 punktów) i rozmiaru formy (szerokość i wysokość) odpowiednio zapewnia czytelność bez deformowania układu innych kontrolek.
Zarządzanie właściwościami kontrolek
Corey podkreśla pułapki domyślnych właściwości kontrolek przy zmianie ustawień ogólnych formy po dodaniu kontrolek. Następnie dodaje etykietę, pole tekstowe i przycisk do formy i pokazuje, że automatycznie przyjmuje rozmiar czcionki wybrany dla formy. Demonstruje, jak zmiana rozmiaru czcionki wpływa na wszystkie kontrolki, zachęcając deweloperów do ustalenia tych ustawień na wczesnym etapie, aby uniknąć niezamierzonych zmian układu później. Jeśli zmienisz wartość właściwości dla każdej kontrolki, nie przyjmuje domyślnych wartości formy (1:06:33).
Konwencje nazw kontrolek
Jedna z kluczowych lekcji wideo Tima to używanie znaczących konwencji nazw dla kontrolek. Zamiast tradycyjnych "lblFirstName" czy "txtFirstName", Corey zaleca użycie stylu camelCase dla zmiennych (firstNameLabel, firstNameTextBox) i dodanie nazwy kontrolki na końcu.
Obsługa zdarzeń i konwencje nazewnictwa
Wartościową praktyką, którą zaleca Tim, jest nadawanie nazw kontrolkom i obsługa zdarzeń w sposób spójny. Przez nadawanie kontrolkom intuicyjnych nazw od samego początku (sayHelloButton, firstNameTextBox), deweloperzy usprawniają obsługę zdarzeń. To podejście zapobiega zamieszaniu przy obsłudze wielu zdarzeń na różnych formach i wzmacnia utrzymanie kodu.
Pokazuje to, pokazując różnicę między nadaniem odpowiednich nazw przyciskom w porównaniu do pozostawienia ich jako domyślne, takie jak button1, button2 itp. To podejście współgra z nowoczesnymi praktykami kodowania, umożliwiając szybkie wyszukiwanie i poprawiając czytelność, co sprawia, że łatwiej zrozumieć cel każdej kontrolki na pierwszy rzut oka.
Implementowanie kolejności Tab i dostępności
Kolejnym kluczowym aspektem jest ustawienie porządku Tab dla kontrolek. Tim wyjaśnia, jak używać właściwości TabIndex, aby zapewnić użytkownikom możliwość logicznej nawigacji po formie z użyciem klawisza Tab. To nie tylko poprawia doświadczenia użytkownika, ale również zwiększa dostępność dla użytkowników, którzy polegają na nawigacji klawiaturowej.
Przesyłanie danych między formami
Rozbudowując możliwości WinForms, Tim omawia przesyłanie danych między różnymi formami. Pokazuje, jak zdefiniować konstruktory w formach, aby ułatwić wymianę danych. Ta technika pozwala deweloperom inicjalizować nowe formy z konkretnymi danymi, zwiększając elastyczność w projektowaniu aplikacji.
Wnioski
Samouczek Tima Coreya na temat Windows Forms w .NET 6 to cenne źródło dla każdego, kto chce nauczyć się rozwoju aplikacji desktopowych z użyciem C#. Film obejmuje szeroki zakres tematów, od podstawowej konfiguracji po zaawansowane elementy sterujące i najlepsze praktyki, zapewniając solidne podstawy do tworzenia profesjonalnych aplikacji Windows Forms w języku C#.
Aby uzyskać szczegółowy przewodnik z większym kontekstem i dodatkowymi praktycznymi przykładami kodowania, możesz obejrzeć pełny film instruktażowy Tima Coreya tutaj.
