Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan vehet fel felhasználói vezérlőt a projektbe, majd hogyan adhat hozzá felhasználói vezérlőt egy űrlaphoz. Olyan újrafelhasználható felhasználói vezérlőt fog létrehozni, amely vizuálisan vonzó és funkcionális. Az új vezérlő egy TextBox vezérlőt egy Button vezérlővel csoportosít. Amikor a felhasználó kiválasztja a gombot, a szövegmezőben lévő szöveg törlődik. További információ a felhasználói vezérlőkről: Felhasználói vezérlők áttekintése.
A felhasználói vezérlés felhasználóinak megismerése
Ebben a cikkben a fogyasztó kifejezés minden olyan kódra hivatkozik, amely a felhasználói vezérlőt használja. Ez a következőket foglalja magában:
- A felhasználói vezérlőt tartalmazó űrlapok.
- Egyéb vezérlők , amelyek a felhasználói vezérlőt üzemeltetik.
- A felhasználói vezérlőtárra hivatkozó alkalmazások.
Felhasználói vezérlő létrehozásakor újrahasználható összetevőt hoz létre. A fogyasztó az, aki ezt az összetevőt használja azáltal, hogy egy űrlapon helyezi el, beállítja annak tulajdonságait, vagy válaszol az eseményekre. A felhasználónak nem kell tudnia a felhasználói vezérlőt alkotó belső vezérlőkről (például az TextBox
és Button
) – csak az Ön által elérhetővé tenni kívánt tulajdonságokkal és eseményekkel kommunikálnak.
Alapvető kódminta a felhasználói vezérlőkhöz
A részletes implementáció hozzáadása előtt érdemes megismerni a felhasználói vezérlő minimálisan működőképes kódmintáját. A felhasználói vezérlőnek a lényege a következő:
- Eseménytovábbítás – Események átadása belső vezérlőkről a fogyasztónak.
- Tulajdonságexpozíció – Lehetővé teszi a fogyasztó számára a belső vezérlési tulajdonságok elérését.
- Logikai viselkedés – A belső vezérlők közötti interakciók kezelése.
Az alábbi kód ezeket a mintákat mutatja be. Az alapszintű felhasználói vezérléshez nincs szüksége az összes kódra, de ezek a minták segítenek létrehozni egy professzionális, újrafelhasználható összetevőt, amely jól integrálható a tervezővel és a fogyasztói alkalmazásokkal.
Új felhasználói vezérlő hozzáadása
Miután megnyitotta a Windows Forms-projektet a Visual Studióban, a Visual Studio-sablonokkal létrehozhat egy felhasználói vezérlőt:
A Visual Studióban keresse meg a Megoldáskezelő ablakot. Kattintson a jobb gombbal a projektre, és válassza a >Felhasználói vezérlő hozzáadása (Windows Forms)lehetőséget.
Állítsa a vezérlő nevétClearableTextBox-re, majd nyomja meg a Hozzáadás gombot.
A felhasználói vezérlő létrehozása után a Visual Studio megnyitja a tervezőt:
A törölhető szövegdoboz tervezése
A felhasználói vezérlő összetevőkből áll, amelyek a tervezőfelületen létrehozott vezérlők, ugyanúgy, mint az űrlapok tervezésekor. A felhasználói vezérlő és annak rendszerelem-vezérlőinek hozzáadásához és konfigurálásához kövesse az alábbi lépéseket:
Ha a tervező meg van nyitva, a felhasználói vezérlő tervezőfelületének kell lennie a kijelölt objektumnak. Ha nem, kattintson a tervezőfelületre a kijelöléshez. Adja meg a következő tulajdonságokat a Tulajdonságok ablakban:
Ingatlan Érték Minimumméret 84, 53
Méret 191, 53
Adjon hozzá egy Label vezérlőt. Adja meg a következő tulajdonságokat:
Ingatlan Érték Név lblTitle
Elhelyezkedés 3, 5
Adjon hozzá egy TextBox vezérlőt. Adja meg a következő tulajdonságokat:
Ingatlan Érték Név txtValue
Horgony Top, Left, Right
Elhelyezkedés 3, 23
Méret 148, 23
Adjon hozzá egy Button vezérlőt. Adja meg a következő tulajdonságokat:
Ingatlan Érték Név btnClear
Horgony Top, Right
Elhelyezkedés 157, 23
Méret 31, 23
Szöveg ↻
A vezérlőnek a következő képhez hasonlóan kell kinéznie:
Nyomja le az F7 billentyűt az osztály kódszerkesztőjének
ClearableTextBox
megnyitásához.Végezze el a következő kódmódosításokat:
A kódfájl tetején importálja a névteret
System.ComponentModel
.Adja hozzá az
DefaultEvent
attribútumot az osztályhoz. Ez az attribútum beállítja, hogy melyik esemény jön létre, amikor a fogyasztó (a vezérlőt használó űrlap vagy alkalmazás) duplán kattint a vezérlőre a tervezőben. További információ az attribútumokról: Attribútumok (C#) vagy attribútumok áttekintése (Visual Basic).using System.ComponentModel; namespace UserControlProject { [DefaultEvent(nameof(TextChanged))] public partial class ClearableTextBox : UserControl
Imports System.ComponentModel <DefaultEvent("TextChanged")> Public Class ClearableTextBox
Adjon hozzá egy eseménykezelőt, amely továbbítja az
TextBox.TextChanged
eseményt a felhasználói vezérlő felhasználóinak:[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
Figyelje meg, hogy az eseményen deklarált
Browsable
attribútum található. Amikor aBrowsable
rendszer egy eseményre vagy tulajdonságra alkalmazza, azt szabályozza, hogy az elem látható-e a Tulajdonságok ablakban, amikor a vezérlő ki van jelölve a tervezőben. Ebben az esetbentrue
a rendszer paraméterként adja át az attribútumnak, amely azt jelzi, hogy az eseménynek láthatónak kell lennie.Adjon hozzá egy karakterlánctulajdonságot,
Text
, amely elérhetővé teszi aTextBox.Text
tulajdonságot a vezérlőfelület használói számára.[Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public new string Text { get => txtValue.Text; set => txtValue.Text = value; }
<Browsable(True)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> Public Shadows Property Text() As String Get Return txtValue.Text End Get Set(value As String) txtValue.Text = value End Set End Property
Adjon hozzá egy karakterlánctulajdonságot,
Title
, amely elérhetővé teszi aLabel.Text
tulajdonságot a vezérlőfelület használói számára.[Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public string Title { get => lblTitle.Text; set => lblTitle.Text = value; }
<Browsable(True)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> Public Property Title() As String Get Return lblTitle.Text End Get Set(value As String) lblTitle.Text = value End Set End Property
Váltson vissza a
ClearableTextBox
tervezőre, és kattintson duplán abtnClear
vezérlőre, hogy létrehozza azClick
esemény kezelőjét. Adja hozzá a következő kódot a kezelőhöz, amely törli a szövegmezőttxtValue
:private void btnClear_Click(object sender, EventArgs e) => Text = "";
Private Sub btnClear_Click(sender As Object, e As EventArgs) txtValue.Text = "" End Sub
Végül a projekt létrehozásához kattintson a jobb gombbal a projektre a Megoldáskezelő ablakban, és válassza a Build lehetőséget. Nem lehetnek hibák, és a build befejezése után a
ClearableTextBox
vezérlő megjelenik az eszközkészletben.
A következő lépés a vezérlő használata egy űrlapon.
Mintaalkalmazás
Ha az utolsó szakaszban létrehozott egy új projektet, akkor van egy Form nevű Űrlap1, ha nem, akkor hozzon létre egy új űrlapot.
A Megoldáskezelő ablakban kattintson duplán az űrlapra a tervező megnyitásához. Ki kell jelölni az űrlap tervezési felületét.
Állítsa be az űrlap tulajdonságát
Size
a következőre432, 315
: .Nyissa meg az Eszközkészlet ablakot, és kattintson duplán a ClearableTextBox vezérlőre. Ennek a vezérlőnek a projektről elnevezett szakasz alatt kell szerepelnie.
Ismét kattintson duplán a ClearableTextBox vezérlőre egy második vezérlő létrehozásához.
Térjen vissza a tervezőhöz, és válassza el egymástól a vezérlőket, hogy mindkettő látható legyen.
Válasszon ki egy vezérlőt, és adja meg a következő tulajdonságokat:
Ingatlan Érték Név ctlFirstName
Elhelyezkedés 12, 12
Méret 191, 53
Cím First Name
Válassza ki a másik vezérlőt, és állítsa be a következő tulajdonságokat:
Ingatlan Érték Név ctlLastName
Elhelyezkedés 12, 71
Méret 191, 53
Cím Last Name
Az Eszközkészlet ablakban adjon hozzá egy címkevezérlőt az űrlaphoz, és állítsa be a következő tulajdonságokat:
Ingatlan Érték Név lblFullName
Elhelyezkedés 12, 252
Ezután létre kell hoznia az eseménykezelőket a két felhasználói vezérlőhöz. A tervezőben kattintson duplán a
ctlFirstName
vezérlőre. Ez a művelet létrehozza az esemény eseménykezelőtTextChanged
, és megnyitja a kódszerkesztőt.Váltson vissza a tervezőre, és kattintson duplán a
ctlLastName
vezérlőre, hogy létrehozza a második eseménykezelőt.Váltson vissza a tervezőre, és végezzen dupla kattintást az űrlap címsorára. Ez a művelet létrehoz egy eseménykezelőt az
Load
eseményhez.A kódszerkesztőben adjon hozzá egy metódust
UpdateNameLabel
. Ez a módszer egyesíti a két nevet egy üzenet létrehozásához, és hozzárendeli az üzenetet alblFullName
vezérlőhöz.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
Mindkét
TextChanged
eseménykezelő esetében hívja meg a metódustUpdateNameLabel
: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
Végül hívja meg az
UpdateNameLabel
metódust az űrlapLoad
eseményéből: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
Futtassa a projektet, és adjon meg egy utó- és vezetéknevet:
Próbálja meg lenyomni a ↻
gombot az egyik szövegdoboz alaphelyzetbe állításához.
.NET Desktop feedback