Wprowadzenie do programowania kontrolki VB.NET z dziedziczeniem
Jose Luis Pelaez/Getty Images
Budowanie kompletnych komponentów niestandardowych może być bardzo zaawansowanym projektem. Ale możesz zbudować klasę VB.NET, która ma wiele zalet komponentu zestawu narzędzi przy znacznie mniejszym wysiłku. Oto jak!
Aby dowiedzieć się, co należy zrobić, aby stworzyć kompletny komponent niestandardowy, wypróbuj ten eksperyment:
-> Otwórz nowy projekt aplikacji Windows w VB.NET.
-> Dodaj pole wyboru z przybornika do formularza.
-> Kliknij przycisk „Pokaż wszystkie pliki” u góryEksplorator rozwiązań.
Spowoduje to wyświetlenie plików, które Visual Studio tworzy dla Twojego projektu (więc nie musisz tego robić). Jako przypis historyczny, kompilator VB6 robił wiele takich samych rzeczy, ale nigdy nie można było uzyskać dostępu do kodu, ponieważ był on ukryty w skompilowanym „kodzie p”. Można było tworzyć niestandardowe kontrolki również w VB6, ale było to o wiele trudniejsze i wymagało specjalnego narzędzia, które Microsoft dostarczył właśnie w tym celu.
W formie Projektant.vb plik, przekonasz się, że poniższy kod został automatycznie dodany we właściwych lokalizacjach, aby obsługiwać komponent CheckBox. (Jeśli masz inną wersję programu Visual Studio, Twój kod może być nieco inny). Jest to kod, który program Visual Studio pisze dla Ciebie.
|_+_||_+_|Jest to kod, który musisz dodać do swojego programu, aby utworzyć niestandardową kontrolkę. Należy pamiętać, że wszystkie metody i właściwości rzeczywistej kontrolki CheckBox znajdują się w klasie dostarczonej przez .NET Framework: System.Windows.Forms.CheckBox . To nie jest część twojego projektu, ponieważ jest zainstalowane w systemie Windows dla wszystkich programów .NET. Ale jest działka z tego.
Inną kwestią, o której należy pamiętać, jest to, że jeśli używaszWPF(Windows Presentation Foundation), klasa .NET CheckBox pochodzi z zupełnie innej biblioteki o nazwie Sterowanie.Systemowe.Windows . Ten artykuł działa tylko w przypadku aplikacji Windows Forms, ale zasady dziedziczenia działają tutaj dla dowolnego projektu VB.NET.
Załóżmy, że projekt wymaga kontrolki bardzo podobnej do jednej ze standardowych kontrolek. Na przykład pole wyboru, które zmieniło kolor lub wyświetlało małą „szczęśliwą buźkę” zamiast małej grafiki „z zaznaczeniem”. Zbudujemy klasę, która to zrobi i pokażemy, jak dodać ją do swojego projektu. Chociaż może to być przydatne samo w sobie, prawdziwym celem jest zademonstrowanie VB.NET dziedzictwo .
Zacznijmy kodować
Aby rozpocząć, zmień nazwę pola wyboru, które właśnie dodałeś stare pole wyboru . (Możesz przestać wyświetlać ponownie „Pokaż wszystkie pliki”, aby uprościć Eksplorator rozwiązań). Teraz dodaj nową klasę do projektu. Można to zrobić na kilka sposobów, w tym kliknięcie prawym przyciskiem myszy projektu w Eksploratorze rozwiązań i wybranie opcji „Dodaj”, a następnie „Klasa” lub wybranie opcji „Dodaj klasę” w obszarze menu Projekt. Zmień nazwę pliku nowej klasy na nowe Pole wyboru żeby wszystko było proste. Na koniec otwórz okno kodu dla klasy i dodaj ten kod:
|_+_||_+_|(W tym artykule i innych na stronie, wiele kontynuacji linii jest używanych do utrzymania krótkich linii, tak aby zmieściły się w przestrzeni dostępnej na stronie internetowej.)
Pierwszą rzeczą, którą należy zauważyć w nowym kodzie zajęć, jest Dziedziczy słowo kluczowe. Oznacza to, że wszystkie właściwości i metody VB.NET Framework CheckBox są automatycznie częścią tego. Aby docenić, ile pracy oszczędza to, musisz spróbować zaprogramować coś w rodzaju komponentu CheckBox od podstaw.
W powyższym kodzie należy zwrócić uwagę na dwie kluczowe rzeczy:
Pierwszym z nich jest kod używa Nadpisanie zastąpić standardowe zachowanie .NET, które miałoby miejsce dla OnPaint wydarzenie. Zdarzenie OnPaint jest wyzwalane za każdym razem, gdy system Windows zauważy, że część ekranu musi zostać zrekonstruowana. Przykładem może być sytuacja, w której inne okno odsłania część ekranu. System Windows automatycznie aktualizuje ekran, ale następnie wywołuje zdarzenie OnPaint w kodzie. (Zdarzenie OnPaint jest również wywoływane podczas początkowego tworzenia formularza.) Jeśli więc zastąpimy OnPaint, możemy zmienić wygląd rzeczy na ekranie.
Drugi to sposób, w jaki Visual Basic tworzy CheckBox. Zawsze, gdy rodzic jest „sprawdzony” (tj. Ja.sprawdzone jest Prawdziwe ), to nowy kod, który dostarczamy w naszej klasie NewCheckBox, zmieni kolor środka CheckBox zamiast rysować znacznik wyboru.
Reszta to się nazywa Kod GDI+ . Ten kod wybiera prostokąt o dokładnie takim samym rozmiarze jak środek pola wyboru i koloruje go za pomocą wywołań metody GDI+. „Liczby magiczne” określające położenie czerwonego prostokąta „Rectangle(3, 4, 10, 12)” zostały określone eksperymentalnie. Po prostu zmieniłem to, aż wyglądało dobrze.
Jest jeden bardzo ważny krok, o którym chcesz się upewnić, że nie pominiesz procedur zastępowania:
|_+_||_+_|Zastąpienie oznacza, że Twój kod zapewni wszystko kodu wydarzenia. Ale rzadko tego chcesz. Tak więc VB zapewnia sposób na uruchomienie normalnego kodu .NET, który zostałby wykonany dla zdarzenia. To jest stwierdzenie, które to robi. Przekazuje ten sam parametr — pEvent — do kodu zdarzenia, który zostałby wykonany, gdyby nie został nadpisany, MyBase.OnPaint.
Korzystanie z nowej kontroli
Ponieważ nasza nowa kontrolka nie znajduje się w naszym przyborniku, musi zostać utworzona w formie z kodem. Najlepszym miejscem do tego jest formularz Obciążenie procedura zdarzenia.
Otwórz okno kodu dla procedury zdarzenia ładowania formularza i dodaj ten kod:
|_+_||_+_|Aby umieścić nowy checkbox na formularzu, wykorzystaliśmy fakt, że już taki istnieje i właśnie wykorzystaliśmy jego rozmiar i położenie (dostosowane tak, aby właściwość Text się zmieściła). W przeciwnym razie musielibyśmy ręcznie zakodować pozycję. Gdy MyCheckBox zostanie dodany do formularza, dodamy go do kolekcji Controls.
Ale ten kod nie jest zbyt elastyczny. Na przykład kolor czerwony jest zakodowany na stałe, a zmiana koloru wymaga zmiany programu. Możesz również potrzebować grafiki zamiast znacznika wyboru.
Oto nowa, ulepszona klasa CheckBox. Ten kod pokazuje, jak wykonać niektóre z następnych kroków w kierunku programowania obiektowego VB.NET.
|_+_||_+_|Dlaczego wersja BetterCheckBox jest lepsza
Jednym z głównych ulepszeń jest dodanie dwóch Nieruchomości . To jest coś, czego stara klasa w ogóle nie robiła.
Dwie nowe wprowadzone właściwości to
|_+_||_+_|oraz
|_+_||_+_|Aby poznać, jak to działa w VB.NET, wypróbuj ten prosty eksperyment. Dodaj klasę do standardowego projektu, a następnie wprowadź kod:
|_+_||_+_|Po naciśnięciu klawisza Enter po wpisaniu „Pobierz”, VB.NET Intellisense wypełnia cały blok kodu właściwości i wszystko, co musisz zrobić, to zakodować szczegóły projektu. (Bloki Get i Set nie zawsze są wymagane, począwszy od VB.NET 2010, więc musisz przynajmniej powiedzieć Intellisense tyle, aby go uruchomić.)
|_+_||_+_|Bloki te zostały uzupełnione w powyższym kodzie. Celem tych bloków kodu jest umożliwienie dostępu do wartości właściwości z innych części systemu.
Po dodaniu metod będziesz na dobrej drodze do stworzenia kompletnego komponentu. Aby zobaczyć bardzo prosty przykład metody, dodaj ten kod poniżej deklaracji właściwości w klasie betterCheckBox:
|_+_||_+_|Oprócz dostosowania czcionki wyświetlanej w CheckBox, ta metoda dostosowuje również rozmiar pola i lokalizację zaznaczonego prostokąta, aby uwzględnić nowy rozmiar. Aby użyć nowej metody, po prostu zakoduj ją w taki sam sposób, jak każdą inną metodę:
|_+_||_+_|I podobnie jak Właściwości, Visual Studio automatycznie dodaje nową metodę do Intellisense firmy Microsoft!
Głównym celem jest tutaj po prostu zademonstrowanie sposobu kodowania metody. Być może wiesz, że standardowa kontrolka CheckBox umożliwia również zmianę czcionki, więc ta metoda nie dodaje wiele funkcji.
Następny artykuł z tej serii, Programowanie niestandardowej kontrolki VB.NET — wykraczające poza podstawy!, przedstawia metodę, która działa, a także wyjaśnia, jak przesłonić metodę w niestandardowej kontrolce.