Jak utworzyć kontrolkę użytkownika (Windows Forms .NET)
W tym artykule pokazano, jak dodać kontrolkę użytkownika do projektu, a następnie dodać tę kontrolkę użytkownika do elementu form. Utworzysz kontrolkę użytkownika wielokrotnego użytku, która jest wizualnie atrakcyjna i funkcjonalna. Nowa kontrolka grupuje kontrolkę TextBox z kontrolką Button . Gdy użytkownik wybierze buttonelement , tekst w polu tekstowym zostanie wyczyszczone. Aby uzyskać więcej informacji na temat kontrolek użytkowników, zobacz Omówienie kontrolki użytkownika.
Dodawanie kontrolki użytkownika do projektu
Po otwarciu projektu Windows Forms w programie Visual Studio użyj szablonów programu Visual Studio, aby utworzyć kontrolkę użytkownika:
W programie Visual Studio znajdź okno Eksplorator projektów. Kliknij projekt prawym przyciskiem myszy i wybierz polecenie Dodaj>kontrolkę użytkownika (Formularze systemu Windows).
Ustaw nazwę kontrolki na ClearableTextBox i naciśnij przycisk Dodaj.
Po utworzeniu kontrolki użytkownika program Visual Studio otworzy projektanta:
Projektowanie czytelnego pola tekstowego
Kontrolka użytkownika składa się z kontrolek składowych, które są kontrolkami tworzonymi na powierzchni projektowej, podobnie jak w przypadku projektowania elementu form. Wykonaj następujące kroki, aby dodać i skonfigurować kontrolkę użytkownika i jego kontrolki składowe:
Po otwarciu projektanta powierzchnia projektowa kontrolki użytkownika powinna być wybranym obiektem. Jeśli tak nie jest, kliknij powierzchnię projektową, aby ją wybrać. Ustaw następujące właściwości w oknie Właściwości :
Właściwości Wartość Minimalny rozmiar 84, 53
Rozmiar 191, 53
Dodaj kontrolkę Label . Określ następujące właściwości:
Właściwości Wartość Nazwisko lblTitle
Lokalizacja 3, 5
Dodaj kontrolkę TextBox . Określ następujące właściwości:
Właściwości Wartość Nazwisko txtValue
Kotwica Top, Left, Right
Lokalizacja 3, 23
Rozmiar 148, 23
Dodaj kontrolkę Button . Określ następujące właściwości:
Właściwości Wartość Nazwisko btnClear
Kotwica Top, Right
Lokalizacja 157, 23
Rozmiar 31, 23
Text ↻
Kontrolka powinna wyglądać podobnie do poniższej ilustracji:
Naciśnij F7 , aby otworzyć edytor kodu dla
ClearableTextBox
klasy.Wprowadź następujące zmiany kodu:
W górnej części pliku kodu zaimportuj
System.ComponentModel
przestrzeń nazw.DefaultEvent
Dodaj atrybut do klasy. Ten atrybut ustawia zdarzenie generowane przez odbiorcę po dwukrotnym kliknięciu kontrolki w projektancie. Użytkownik będący obiektem deklarujący i używający tej kontrolki. Aby uzyskać więcej informacji na temat atrybutów, zobacz Atrybuty (C#) lub Omówienie atrybutów (Visual Basic).using System.ComponentModel; namespace UserControlProject { [DefaultEvent(nameof(TextChanged))] public partial class ClearableTextBox : UserControl
Imports System.ComponentModel <DefaultEvent("TextChanged")> Public Class ClearableTextBox
Dodaj procedurę obsługi zdarzeń, która przekazuje
TextBox.TextChanged
zdarzenie do odbiorcy:[Browsable(true)] public new event EventHandler? TextChanged { add => txtValue.TextChanged += value; remove => txtValue.TextChanged -= value; }
<Browsable(True)> Public Shadows Custom Event TextChanged As EventHandler AddHandler(value As EventHandler) AddHandler txtValue.TextChanged, value End AddHandler RemoveHandler(value As EventHandler) RemoveHandler txtValue.TextChanged, value End RemoveHandler RaiseEvent(sender As Object, e As EventArgs) End RaiseEvent End Event
Zwróć uwagę, że zdarzenie ma zadeklarowany
Browsable
atrybut . Po zastosowaniuBrowsable
elementu do zdarzenia lub właściwości określa, czy element jest widoczny w oknie Właściwości po wybraniu kontrolki w projektancie. W tym przypadkutrue
parametr jest przekazywany jako parametr do atrybutu wskazującego, że zdarzenie powinno być widoczne.Dodaj właściwość ciągu o nazwie
Text
, która przekazujeTextBox.Text
właściwość do odbiorcy:[Browsable(true)] public new string Text { get => txtValue.Text; set => txtValue.Text = value; }
<Browsable(True)> Public Shadows Property Text() As String Get Return txtValue.Text End Get Set(value As String) txtValue.Text = value End Set End Property
Dodaj właściwość ciągu o nazwie
Title
, która przekazujeLabel.Text
właściwość do odbiorcy:[Browsable(true)] public string Title { get => lblTitle.Text; set => lblTitle.Text = value; }
<Browsable(True)> Public Property Title() As String Get Return lblTitle.Text End Get Set(value As String) lblTitle.Text = value End Set End Property
Wróć do projektanta
ClearableTextBox
i kliknij dwukrotnie kontrolkębtnClear
, aby wygenerować procedurę obsługi dlaClick
zdarzenia. Dodaj następujący kod dla programu obsługi, który czyścitxtValue
pole tekstowe:private void btnClear_Click(object sender, EventArgs e) => Text = "";
Private Sub btnClear_Click(sender As Object, e As EventArgs) txtValue.Text = "" End Sub
Na koniec skompiluj projekt, klikając prawym przyciskiem myszy projekt w oknie Eksplorator rozwiązań i wybierając polecenie Kompiluj. Nie powinno występować żadne błędy, a po zakończeniu kompilacji kontrolka
ClearableTextBox
zostanie wyświetlona w przyborniku do użycia.
Następnym krokiem jest użycie kontrolki w elemecie form.
Aplikacja przykładowa
Jeśli w ostatniej sekcji utworzono nowy projekt, masz pustą Form nazwę Form1. W przeciwnym razie utwórz nowy formelement .
W oknie Eksplorator rozwiązań kliknij dwukrotnie ikonę form , aby otworzyć projektanta. formNależy wybrać powierzchnię projektową.
formUstaw właściwość "s
Size
" na432, 315
.Otwórz okno Przybornik i kliknij dwukrotnie kontrolkę ClearableTextBox. Ta kontrolka powinna być wyświetlana w sekcji o nazwie po projekcie.
Ponownie kliknij dwukrotnie kontrolkę ClearableTextBox , aby wygenerować drugą kontrolkę.
Wróć do projektanta i oddziel kontrolki, aby zobaczyć oba te kontrolki.
Wybierz jedną kontrolkę i ustaw następujące właściwości:
Właściwości Wartość Nazwisko ctlFirstName
Lokalizacja 12, 12
Rozmiar 191, 53
Tytuł First Name
Wybierz drugą kontrolkę i ustaw następujące właściwości:
Właściwości Wartość Nazwisko ctlLastName
Lokalizacja 12, 71
Rozmiar 191, 53
Tytuł Last Name
Wróć do okna Przybornik , dodaj kontrolkę label do formelementu i ustaw następujące właściwości:
Właściwości Wartość Nazwisko lblFullName
Lokalizacja 12, 252
Następnie należy wygenerować programy obsługi zdarzeń dla dwóch kontrolek użytkownika. W projektancie kliknij dwukrotnie kontrolkę
ctlFirstName
. Ta akcja generuje program obsługi zdarzeń dlaTextChanged
zdarzenia i otwiera edytor kodu.Wróć do projektanta i kliknij dwukrotnie kontrolkę, aby wygenerować drugą procedurę
ctlLastName
obsługi zdarzeń.Wróć do projektanta i kliknij formdwukrotnie pasek tytułu. Ta akcja generuje program obsługi zdarzeń dla
Load
zdarzenia.W edytorze kodu dodaj metodę o nazwie
UpdateNameLabel
. Ta metoda łączy obie nazwy w celu utworzenia komunikatu i przypisuje komunikat do kontrolkilblFullName
.private void UpdateNameLabel() { if (string.IsNullOrWhiteSpace(ctlFirstName.Text) || string.IsNullOrWhiteSpace(ctlLastName.Text)) lblFullName.Text = "Please fill out both the first name and the last name."; else lblFullName.Text = $"Hello {ctlFirstName.Text} {ctlLastName.Text}, I hope you're having a good day."; }
Private Sub UpdateNameLabel() If String.IsNullOrWhiteSpace(ctlFirstName.Text) Or String.IsNullOrWhiteSpace(ctlLastName.Text) Then lblFullName.Text = "Please fill out both the first name and the last name." Else lblFullName.Text = $"Hello {ctlFirstName.Text} {ctlLastName.Text}, I hope you're having a good day." End If End Sub
W przypadku obu
TextChanged
programów obsługi zdarzeń wywołaj metodęUpdateNameLabel
:private void ctlFirstName_TextChanged(object sender, EventArgs e) => UpdateNameLabel(); private void ctlLastName_TextChanged(object sender, EventArgs e) => UpdateNameLabel();
Private Sub ctlFirstName_TextChanged(sender As Object, e As EventArgs) Handles ctlFirstName.TextChanged UpdateNameLabel() End Sub Private Sub ctlLastName_TextChanged(sender As Object, e As EventArgs) Handles ctlLastName.TextChanged UpdateNameLabel() End Sub
Na koniec wywołaj metodę
UpdateNameLabel
ze formzdarzenia :Load
private void Form1_Load(object sender, EventArgs e) => UpdateNameLabel();
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load UpdateNameLabel() End Sub
Uruchom projekt i wprowadź imię i nazwisko:
Spróbuj nacisnąć , ↻
button aby zresetować jedno z pól tekstowych.
.NET Desktop feedback