Kontrolki niestandardowe (Windows Forms .NET)

Za pomocą formularzy systemu Windows można opracowywać i implementować nowe kontrolki. Możesz utworzyć nową kontrolkę użytkownika, zmodyfikować istniejące kontrolki za pomocą dziedziczenia lub napisać kontrolkę niestandardową, która wykonuje własny obraz. W tym artykule przedstawiono różnice między różnymi rodzajami kontrolek, z których można dziedziczyć, oraz przedstawiono informacje o sposobie wybierania określonego typu kontrolki dla projektu.

Ważne

Dokumentacja przewodnika dla komputerów dla platform .NET 7 i .NET 6 jest w budowie.

Klasa formantu podstawowego

Klasa Control jest klasą bazową dla kontrolek Windows Forms. Zapewnia infrastrukturę wymaganą do wyświetlania wizualnego w aplikacjach Windows Forms i zapewnia następujące możliwości:

  • Uwidacznia uchwyt okna.
  • Zarządza routingiem komunikatów.
  • Udostępnia zdarzenia myszy i klawiatury oraz wiele innych zdarzeń interfejsu użytkownika.
  • Udostępnia zaawansowane funkcje układu.
  • Zawiera wiele właściwości specyficznych dla wyświetlania wizualizacji, takich jak ForeColor, BackColor, Heighti Width.

Ponieważ tak duża część infrastruktury jest dostarczana przez klasę bazową, stosunkowo łatwo jest opracować własne kontrolki Windows Forms.

Tworzenie własnej kontrolki

Istnieją trzy typy kontrolek niestandardowych, które można utworzyć: kontrolki użytkownika, kontrolki rozszerzone i kontrolki niestandardowe. Poniższa tabela ułatwia podjęcie decyzji o typie kontrolki, którą należy utworzyć:

Jeśli... Utwórz ...
  • Chcesz połączyć funkcje kilku kontrolek Windows Forms w jedną jednostkę wielokrotnego użytku.
Zaprojektuj kontrolkę użytkownika, dziedzicząc z elementu System.Windows.Forms.UserControl.
  • Większość potrzebnych funkcji jest już identyczna z istniejącą kontrolką Windows Forms.
  • Nie potrzebujesz niestandardowego graficznego interfejsu użytkownika lub chcesz zaprojektować nowy graficzny interfejs użytkownika dla istniejącej kontrolki.
Rozszerzanie kontrolki przez dziedziczenie po określonej kontrolce Windows Forms.
  • Chcesz podać niestandardową graficzną reprezentację kontrolki.
  • Musisz zaimplementować funkcje niestandardowe, które nie są dostępne za pomocą standardowych kontrolek.
Utwórz kontrolkę niestandardową, dziedzicząc z elementu System.Windows.Forms.Control.

Kontrolki użytkownika

Kontrolka użytkownika jest kolekcją kontrolek Windows Forms przedstawionych jako pojedyncza kontrolka dla użytkownika. Ten rodzaj kontrolki jest określany jako kontrolka złożona. Zawarte kontrolki są nazywane kontrolkami składowymi.

Kontrolka użytkownika przechowuje wszystkie funkcje związane z każdą z zawartych kontrolek Windows Forms i umożliwia selektywne uwidacznianie i wiązanie ich właściwości. Kontrolka użytkownika zapewnia również wiele domyślnych funkcji obsługi klawiatury bez dodatkowego nakładu pracy programistycznej.

Na przykład można skompilować kontrolkę użytkownika w celu wyświetlania danych adresów klientów z bazy danych. Ta kontrolka obejmuje kontrolkę DataGridView do wyświetlania pól bazy danych, elementu BindingSource do obsługi powiązania ze źródłem danych oraz kontrolki BindingNavigator do przechodzenia przez rekordy. Można selektywnie uwidocznić właściwości powiązania danych i spakować i ponownie użyć całej kontrolki z aplikacji do aplikacji.

Aby uzyskać więcej informacji, zobacz Omówienie kontrolki użytkownika.

Kontrolki rozszerzone

Można uzyskać dziedziczone kontrolki z dowolnej istniejącej kontrolki Windows Forms. Dzięki temu podejściu można zachować całą nieodłączną funkcjonalność kontrolki Windows Forms, a następnie rozszerzyć tę funkcjonalność, dodając właściwości niestandardowe, metody lub inne funkcje. Dzięki tej opcji można zastąpić logikę malowania kontrolki podstawowej, a następnie rozszerzyć jej interfejs użytkownika, zmieniając jego wygląd.

Możesz na przykład utworzyć kontrolkę pochodzącą z kontrolki Button , która śledzi liczbę kliknięć przez użytkownika.

W niektórych kontrolkach można również dodać niestandardowy wygląd do graficznego interfejsu użytkownika kontrolki, przesłaniając OnPaint metodę klasy bazowej. W przypadku przycisku rozszerzonego, który śledzi kliknięcia, można zastąpić OnPaint metodę w celu wywołania podstawowej implementacji OnPaintelementu , a następnie narysować liczbę kliknięć w jednym rogu Button obszaru klienta kontrolki.

Kontrolki niestandardowe

Innym sposobem utworzenia kontrolki jest utworzenie jednej znacznie od początku przez dziedziczenie z Controlelementu . Klasa Control zapewnia wszystkie podstawowe funkcje wymagane przez kontrolki, w tym zdarzenia obsługi myszy i klawiatury, ale nie mają funkcji specyficznych dla sterowania ani interfejsu graficznego.

Utworzenie kontrolki przez dziedziczenie z Control klasy wymaga większej myślenia i nakładu pracy niż dziedziczenie z UserControl lub istniejącej kontrolki Windows Forms. Ponieważ dla Ciebie pozostało wiele implementacji, kontrola może mieć większą elastyczność niż złożona lub rozszerzona kontrola i można dostosować kontrolkę do konkretnych potrzeb.

Aby zaimplementować kontrolkę niestandardową, musisz napisać kod zdarzenia OnPaint kontrolki, który kontroluje sposób wizualnego rysowania kontrolki. Należy również napisać wszelkie zachowania specyficzne dla danej funkcji dla kontrolki. Można również zastąpić metodę WndProc i bezpośrednio obsługiwać komunikaty systemu Windows. Jest to najbardziej zaawansowany sposób tworzenia kontrolki, ale aby skutecznie korzystać z tej techniki, musisz zapoznać się z interfejsem API Win32® platformy Microsoft.

Przykładem kontrolki niestandardowej jest kontrolka zegara, która duplikuje wygląd i zachowanie zegara analogowego. Niestandardowy obraz jest wywoływany, aby spowodować przejście rąk zegara w odpowiedzi na Tick zdarzenia ze składnika wewnętrznego Timer .

Niestandardowe środowisko projektowania

Jeśli musisz zaimplementować niestandardowe środowisko czasu projektowania, możesz utworzyć własnego projektanta. W przypadku kontrolek złożonych należy utworzyć klasę projektanta niestandardowego ParentControlDesigner z klas lub DocumentDesigner . W przypadku kontrolek rozszerzonych i niestandardowych utwórz klasę projektanta niestandardowego ControlDesigner z klasy .

Użyj polecenia , DesignerAttribute aby skojarzyć kontrolkę z projektantem.

Poniższe informacje są nieaktualne, ale mogą ci pomóc.