Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, projenize kullanıcı denetimi eklemeyi ve ardından bu kullanıcı denetimini forma eklemeyi öğreneceksiniz. Hem görsel açıdan çekici hem de işlevsel olan yeniden kullanılabilir bir kullanıcı denetimi oluşturacaksınız. Yeni denetim grubu, bir TextBox denetimi ve bir Button denetimi içerir. Kullanıcı düğmeyi seçtiğinde, metin kutusundaki metin temizlenir. Kullanıcı denetimleri hakkında daha fazla bilgi için bkz . Kullanıcı denetimine genel bakış.
Kullanıcı kontrolüne sahip tüketicileri anlama
Bu makale boyunca tüketici terimi, kullanıcı denetiminizi kullanan tüm kodlara başvurur. Buna aşağıdakiler dahildir:
- Kullanıcı denetiminizi içeren formlar.
- Kullanıcı denetiminizi barındıran diğer denetimler.
- Kullanıcı denetim kitaplığınıza başvuran uygulamalar.
Kullanıcı denetimi oluşturduğunuzda, yeniden kullanılabilir bir bileşen oluşturursunuz. Tüketici, bir forma yerleştirerek, özelliklerini ayarlayarak veya olaylarına yanıt vererek bu bileşeni kullanan kişidir. Tüketicinin, kullanıcı denetiminizi oluşturan iç denetimler (ve TextBoxgibiButton) hakkında bilgi sahibi olması gerekmez; yalnızca kullanıma sunmayı seçtiğiniz özellikler ve olaylarla etkileşim kurar.
Kullanıcı denetimleri için temel kod düzeni
Ayrıntılı uygulamayı eklemeden önce, kullanıcı denetimi için en düşük uygulanabilir kod desenini anlamanız yararlı olur. Temel olarak, bir kullanıcı denetimi şunları gerektirir:
- Olay iletme - İç denetimlerden tüketiciye olayları geçirin.
- Özellik açığa çıkarma - Tüketicinin iç denetim özelliklerine erişmesine izin verin.
- Mantıksal davranış - İç denetimler arasındaki etkileşimleri işleme.
Aşağıdaki kodda bu desenler gösterilmektedir. Temel bir kullanıcı denetimi için bu kodun tümüne ihtiyacınız yoktur, ancak bu desenler tasarımcı ve tüketici uygulamalarıyla iyi tümleşen profesyonel, yeniden kullanılabilir bir bileşen oluşturmaya yardımcı olur.
Yeni kullanıcı denetimi ekleme
Windows Forms projenizi Visual Studio'da açtıktan sonra, kullanıcı denetimi oluşturmak için Visual Studio şablonlarını kullanın:
Visual Studio'da Çözüm Gezgini penceresini bulun. Projeye sağ tıklayın ve Kullanıcı Denetimi Ekle 'yi> seçin.
Denetimin Adını ClearableTextBox olarak ayarlayın ve Ekle'ye basın.
Kullanıcı denetimi oluşturulduktan sonra Visual Studio tasarımcıyı açar:
Temizlenebilir metin kutusunu tasarla
Kullanıcı denetimi,
Tasarımcı açıkken, seçili nesne kullanıcı kontrolü tasarım yüzeyi olmalıdır. Değilse, seçmek için tasarım yüzeyine tıklayın. Özellikler penceresinde aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer Minimum Boyutu 84, 53Boyut 191, 53Bir denetim Label ekleyin. Aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer İsim lblTitleYer 3, 5Bir denetim TextBox ekleyin. Aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer İsim txtValueBağlayıcı Top, Left, RightYer 3, 23Boyut 148, 23Bir denetim Button ekleyin. Aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer İsim btnClearBağlayıcı Top, RightYer 157, 23Boyut 31, 23Metin ↻Denetim aşağıdaki görüntü gibi görünmelidir:
F7 tuşuna basarak
ClearableTextBoxiçin kod düzenleyicisini açın.Aşağıdaki kod değişikliklerini yapın:
Kod dosyasının üst kısmında
System.ComponentModelad alanını içeri aktarın.özniteliğini
DefaultEventsınıfına ekleyin. Bu öznitelik, tüketici (bu denetimi kullanan form veya uygulama) tasarımcıdaki denetime çift tıkladığında hangi olayın oluşturulacağı ayarlar. Öznitelikler hakkında daha fazla bilgi için bkz. Öznitelikleri (C#) veya Özniteliklerine genel bakış (Visual Basic).using System.ComponentModel; namespace UserControlProject { [DefaultEvent(nameof(TextChanged))] public partial class ClearableTextBox : UserControlImports System.ComponentModel <DefaultEvent("TextChanged")> Public Class ClearableTextBoxKullanıcı denetiminizin tüketicilerine
TextBox.TextChangedolayını ileten bir olay işleyicisi ekleyin.[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 EventOlayda
Browsableözniteliğin bildirildiğine dikkat edin.Browsablebir olaya veya özelliğe uygulandığında, denetim tasarımcıda seçildiğinde öğenin Özellikler penceresinde görünür olup olmadığını denetler. Bu durumda,trueolayın görünür olması gerektiğini belirten özniteliğine parametre olarak geçirilir.Kullanıcı denetiminizin tüketicilerine
Textözelliğini kullandıranTextBox.Textadında bir dize özelliği ekleyin.[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 PropertyKullanıcı denetiminizin tüketicilerine
Titleözelliğini kullandıranLabel.Textadında bir dize özelliği ekleyin.[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
Tasarımcıya
ClearableTextBoxgeri dönün ve denetime çift tıklayarakbtnClearolay içinClickbir işleyici oluşturun. metin kutusunu temizleyentxtValueişleyici için aşağıdaki kodu ekleyin:private void btnClear_Click(object sender, EventArgs e) => Text = "";Private Sub btnClear_Click(sender As Object, e As EventArgs) txtValue.Text = "" End SubSon olarak, Çözüm Gezgini penceresinde projeye sağ tıklayıp Oluştur'a tıklayarak projeyi derleyin. Herhangi bir hata olmamalıdır ve derleme tamamlandıktan
ClearableTextBoxsonra denetim, kullanım için araç kutusunda görünür.
Sonraki adım, denetimi bir formda kullanmaktır.
Örnek uygulama
Son bölümde yeni bir proje oluşturduysanız, Formadlı boş bir 'a sahipsiniz; aksi takdirde, yeni bir form oluşturun.
Çözüm Gezgini penceresinde, forma çift tıklayarak tasarımcıyı açın. Formun tasarım yüzeyi seçilmelidir.
Formun
Sizeözelliğini432, 315olarak ayarlayın.Araç Kutusu penceresini açın ve ClearableTextBox denetimine çift tıklayın. Bu denetim, projenizin adını taşıyan bir bölüm altında listelenmelidir.
İkinci bir denetim oluşturmak için ClearableTextBox denetimine çift tıklayın.
Tasarımcıya geri hareket edin ve her ikisini de görebilmek için denetimleri birbirinden ayırın.
Bir denetim seçin ve aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer İsim ctlFirstNameYer 12, 12Boyut 191, 53Başlık First NameDiğer denetimi seçin ve aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer İsim ctlLastNameYer 12, 71Boyut 191, 53Başlık Last NameAraç Kutusu penceresine geri dönün, forma bir etiket denetimi ekleyin ve aşağıdaki özellikleri ayarlayın:
Mülkiyet Değer İsim lblFullNameYer 12, 252Ardından, iki kullanıcı denetimi için olay işleyicileri oluşturmanız gerekir. Tasarımcıda
ctlFirstNamekontrolüne çift tıklayın. Bu eylem, olay için olay işleyicisiniTextChangedoluşturur ve kod düzenleyicisini açar.Tasarımcıya geri dönün ve ikinci olay işleyicisini
ctlLastNameoluşturmak için denetime çift tıklayın.Tasarımcıya geri dönün ve formun başlık çubuğuna çift tıklayın. Bu eylem, olay için bir olay işleyicisi
Loadoluşturur.Kod düzenleyicisinde adlı
UpdateNameLabelbir yöntem ekleyin. Bu yöntem, bir ileti oluşturmak için her iki adı birleştirir ve iletiyi denetimelblFullNameatar.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 SubHer iki
TextChangedolay işleyicisi için yöntemini çağırınUpdateNameLabel: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 SubSon olarak formun
UpdateNameLabelolayındanLoadyöntemini çağırın: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
Projeyi çalıştırın ve bir ad ve soyadı girin:
Metin kutularından birini sıfırlamak için ↻ düğmesine basmayı deneyin.
.NET Desktop feedback