Programowanie klasy w celu utworzenia niestandardowej kontrolki VB.NET

Budowanie kompletnych niestandardowych komponentów może być bardzo zaawansowanym projektem. Ale możesz zbudować klasę VB.NET, która ma wiele zalet komponentu przybornika przy znacznie mniejszym wysiłku. Oto jak!

Aby dowiedzieć się, co trzeba zrobić, aby utworzyć kompletny niestandardowy komponent, wypróbuj ten eksperyment:

-> Otwórz nowy projekt aplikacji Windows w VB.NET.
-> Dodaj CheckBox z Przybornika do formularza.
-> Kliknij przycisk „Pokaż wszystkie pliki” u góry Solution Explorer.

Spowoduje to wyświetlenie plików, które Visual Studio tworzy dla twojego projektu (więc nie musisz). Zgodnie z historycznym przypisem kompilator VB6 zrobił wiele takich samych rzeczy, ale nigdy nie można było uzyskać dostępu do kodu, ponieważ został on zakopany w skompilowanym „p-kodzie”. Możesz również tworzyć niestandardowe formanty w VB6, ale było to o wiele trudniejsze i wymagało specjalnego narzędzia, które Microsoft dostarczył właśnie do tego celu.

W formie Designer.vb plik, okaże się, że poniższy kod został dodany automatycznie w odpowiednich lokalizacjach w celu obsługi składnika CheckBox. (Jeśli masz inną wersję programu Visual Studio, kod może być nieco inny.) Jest to kod, który program Visual Studio pisze dla Ciebie.

instagram viewer

„Wymagane przez komponenty prywatne Windows Form Designer _ jako system. ComponentModel. IContainer „UWAGA: Wymagana jest następująca procedura” przez Projektanta formularzy Windows ”Można to zmodyfikować za pomocą Projektanta formularzy Windows.„ Nie modyfikuj go za pomocą edytora kodu. _Private Sub InitializeComponent () Me. CheckBox1 = Nowy system. Windows Formularze CheckBox () Me. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Nowy system. Rysunek. Punkt (29, 28) Me. CheckBox1.Name = "CheckBox1".. . i tak dalej ...

Jest to kod, który musisz dodać do programu, aby utworzyć niestandardową kontrolkę. Należy pamiętać, że wszystkie metody i właściwości rzeczywistej kontrolki CheckBox należą do klasy dostarczanej przez .NET Framework: System. Windows Formularze CheckBox. To nie jest częścią twojego projektu, ponieważ jest zainstalowany w systemie Windows dla wszystkich programów .NET. Ale jest los z tego.

Kolejną kwestią, o której należy pamiętać, jest to, że używasz WPF (Windows Presentation Foundation), klasa .NET CheckBox pochodzi z zupełnie innej biblioteki o nazwie System. Windows Sterownica. Ten artykuł działa tylko w przypadku aplikacji Windows Forms, ale zasady dziedziczenia tutaj działają dla każdego projektu VB.NET.

Załóżmy, że Twój projekt potrzebuje kontroli, która jest bardzo podobna do jednej ze standardowych kontroli. Na przykład pole wyboru, które zmieniło kolor lub wyświetlało małą „szczęśliwą twarz” zamiast wyświetlać małą grafikę „zaznaczania”. 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ę CheckBox, który właśnie dodałeś oldCheckBox. (Możesz chcieć przestać wyświetlać „Pokaż wszystkie pliki”, aby uprościć Eksploratora rozwiązań.) Teraz dodaj nową klasę do swojego projektu. Można to zrobić na kilka sposobów, w tym klikając prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierając „Dodaj”, a następnie „Klasa” lub „Dodaj klasę” pod pozycją menu Projekt. Zmień nazwę pliku nowej klasy na newCheckBox żeby wszystko było proste. Na koniec otwórz okno kodu dla klasy i dodaj ten kod:

Klasa publiczna newCheckBox dziedziczy CheckBox Private CenterSquareColor As Color = Kolor. Red Protected zastępuje Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ Jako nowy prostokąt MyBase (3, 4, 10, 12). OnPaint (pEvent) If Me. Sprawdzone Następnie pEvent. Grafika. FillRectangle (nowy SolidBrush (CenterSquareColor), CenterSquare) End If End End SubEnd Class

(W tym artykule i innych na stronie używa się wielu kontynuacji linii, aby linie były krótkie, aby pasowały do ​​miejsca dostępnego na stronie internetowej).

Pierwszą rzeczą, na którą należy zwrócić uwagę o nowym kodzie klasy, 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 to oszczędza, musisz spróbować zaprogramować od podstaw coś w rodzaju składnika CheckBox.

W powyższym kodzie należy zwrócić uwagę na dwie kluczowe rzeczy:

Pierwszym z nich jest użycie kodu Nadpisanie aby zastąpić standardowe zachowanie .NET, które miałoby miejsce dla OnPaint zdarzenie. Zdarzenie OnPaint jest uruchamiane za każdym razem, gdy system Windows zauważy, że część ekranu musi zostać zrekonstruowana. Przykładem może być inne okno, które odsłania część ekranu. Windows automatycznie aktualizuje wyświetlacz, 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. Ilekroć rodzic jest „Sprawdzany” (to znaczy Mnie. Sprawdzone jest Prawdziwe), to nowy kod, który udostępniamy w naszej klasie NewCheckBox, ponownie pokoloruje środek CheckBox zamiast rysować znacznik wyboru.

Reszta jest nazywana Kod GDI +. Ten kod wybiera prostokąt o dokładnie tym samym rozmiarze co środek pola wyboru i koloruje go za pomocą wywołań metody GDI +. „Liczby magiczne” służące do ustawienia czerwonego prostokąta „Prostokąt (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, który chcesz zapewnić, aby nie pominąć procedur zastępowania:

MyBase. OnPaint (pEvent)

Zastąpienie oznacza, że ​​Twój kod zapewni wszystko kodu wydarzenia. Ale rzadko tego chcesz. Tak więc VB zapewnia sposób uruchomienia normalnego kodu .NET, który zostałby wykonany dla zdarzenia. To stwierdzenie to robi. Przekazuje ten sam parametr - pEvent - do kodu zdarzenia, który zostałby wykonany, gdyby nie został zastąpiony, MyBase. OnPaint.

Korzystanie z nowej kontroli

Ponieważ naszej nowej kontroli nie ma w naszym zestawie narzędzi, należy ją utworzyć w postaci kodu. Najlepszym miejscem do tego jest formularz Załaduj procedura zdarzenia.

Otwórz okno kodu dla procedury zdarzenia ładowania formularza i dodaj ten kod:

Sub prywatny frmCustCtrlEx_Load (nadawca ByVal jako system. Obiekt, ByVal e As System. EventArgs) Obsługuje MyBase. Załaduj Dim customCheckBox jako nowy newCheckBox () Za pomocą customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Lewy .Top = oldCheckBox. Top + oldCheckBox. Wysokość. Rozmiar = Nowy rozmiar (oldCheckBox. Rozmiar. Szerokość + 50, oldCheckBox. Rozmiar. Wysokość) Koniec z kontrolkami. Dodaj (customCheckBox) End Sub

Aby umieścić nowe pole wyboru w formularzu, skorzystaliśmy z faktu, że już tam jest i po prostu użyliśmy jego rozmiaru i położenia (dostosowano, aby dopasować właściwość Text). W przeciwnym razie musielibyśmy ręcznie kodować pozycję. Po dodaniu MyCheckBox do formularza dodajemy 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 także chcieć grafikę zamiast znacznika wyboru.

Oto nowa, ulepszona klasa CheckBox. Ten kod pokazuje, jak wykonać kilka kolejnych kroków w kierunku programowania obiektowego VB.NET.

Klasa publiczna lepiej CheckBox dziedziczy CheckBox Private CenterSquareColor As Color = Kolor. Blue Private CenterSquareImage As Bitmap Private CenterSquare As New Prostokąt (3, 4, 10, 12) Chronione przesłonięcia Sub OnPaint _ (ByVal pEvent As _ System. Windows Formularze PaintEventArgs) MyBase. OnPaint (pEvent) If Me. Sprawdzone, jeśli CenterSquareImage jest niczym, to pEvent. Grafika. FillRectangle (Nowy SolidBrush (CenterSquareColor), CenterSquare) W przeciwnym razie. Grafika. DrawImage (CenterSquareImage, CenterSquare) End If End If End Sub Właściwość publiczna Sub FillColor () As Colour Get FillColor = CenterSquareColor End Get Set (ByVal Value As Color) CenterSquareColor = Wartość końcowa zestawu właściwości końcowych Właściwość publiczna FillImage () As Bitmap Get FillImage = CenterSquareImage End Get Set (ByVal Value As Bitmap) CenterSquareImage = Wartość końca Set End End PropertyEnd Klasa

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 zrobiła.

Dwie nowe wprowadzone właściwości to

FillColor

i

FillImage

Aby poznać smak tego działania w VB.NET, wypróbuj ten prosty eksperyment. Dodaj klasę do standardowego projektu, a następnie wprowadź kod:

Własność publiczna, cokolwiek otrzymasz

Kiedy naciśniesz Enter po wpisaniu „Get”, VB.NET Intellisense wypełnia cały blok kodu nieruchomości, a wszystko, co musisz zrobić, to zakodować specyfikę swojego projektu. (Bloki Get and Set nie zawsze są wymagane, począwszy od VB.NET 2010, więc musisz przynajmniej powiedzieć Intellisense tyle, aby go uruchomić).

Właściwość publiczna Cokolwiek Uzyskaj End Get Set (wartość ByVal) End SetEnd Właściwość

Te bloki 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.

Dzięki 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:

Podkreślenie publiczne () Ja. Czcionka = nowy system. Rysunek. Czcionka (_ „Microsoft Sans Serif”, 12.0!, _ System. Rysunek. Styl czcionki. Pogrubienie) Ja. Rozmiar = nowy system. Rysunek. Rozmiar (200, 35) CenterSquare. Przesunięcie (CenterSquare. Z lewej - 3, CenterSquare. Top + 3) End Sub

Oprócz dostosowania czcionki wyświetlanej w CheckBox, ta metoda dostosowuje również rozmiar ramki i położenie zaznaczonego prostokąta, aby uwzględnić nowy rozmiar. Aby użyć nowej metody, po prostu koduj ją w taki sam sposób, jak każdą inną metodę:

MyBetterEmphasizedBox. Podkreślać()

I podobnie jak Properties, Visual Studio automatycznie dodaje nową metodę do Intellisense Microsoftu!

Głównym celem jest po prostu wykazanie, w jaki sposób kodowana jest metoda. Być może zdajesz sobie sprawę, że standardowa kontrolka CheckBox pozwala również na zmianę Czcionki, więc ta metoda nie dodaje zbyt wiele funkcji.

Następny artykuł z tej serii, Programowanie niestandardowej kontrolki VB.NET - Beyond the Basics!, pokazuje metodę, która działa, a także wyjaśnia, jak zastąpić metodę w niestandardowej kontrolce.

instagram story viewer