Aracılığıyla paylaş


Kullanıcı denetimi oluşturma

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:

  1. Visual Studio'da Çözüm Gezgini penceresini bulun. Projeye sağ tıklayın ve Kullanıcı Denetimi Ekle 'yi> seçin.

    Bir Windows Forms projesine kullanıcı denetimi eklemek için Visual Studio çözüm gezginine sağ tıklayın

  2. Denetimin Adını ClearableTextBox olarak ayarlayın ve Ekle'ye basın.

    Windows Forms için Visual Studio'da öğe ekle iletişim kutusu

Kullanıcı denetimi oluşturulduktan sonra Visual Studio tasarımcıyı açar:

Windows Forms için Visual Studio'da kullanıcı denetimi tasarımcısı

Temizlenebilir metin kutusunu tasarla

Kullanıcı denetimi, bileşen denetimiiçermektedir, tıpkı bir form tasarladığınız gibi tasarım yüzeyindeoluşturduğunuz denetimlerdir . Kullanıcı denetimini ve onun kurucu denetimlerini eklemek ve yapılandırmak için şu adımları izleyin:

  1. 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, 53
    Boyut 191, 53
  2. Bir denetim Label ekleyin. Aşağıdaki özellikleri ayarlayın:

    Mülkiyet Değer
    İsim lblTitle
    Yer 3, 5
  3. Bir denetim TextBox ekleyin. Aşağıdaki özellikleri ayarlayın:

    Mülkiyet Değer
    İsim txtValue
    Bağlayıcı Top, Left, Right
    Yer 3, 23
    Boyut 148, 23
  4. Bir denetim Button ekleyin. Aşağıdaki özellikleri ayarlayın:

    Mülkiyet Değer
    İsim btnClear
    Bağlayıcı Top, Right
    Yer 157, 23
    Boyut 31, 23
    Metin

    Denetim aşağıdaki görüntü gibi görünmelidir:

    Windows Forms ile Visual Studio, yeni tasarlanmış kullanıcı denetimini gösterir.

  5. F7 tuşuna basarak ClearableTextBox için kod düzenleyicisini açın.

  6. Aşağıdaki kod değişikliklerini yapın:

    1. Kod dosyasının üst kısmında System.ComponentModel ad alanını içeri aktarın.

    2. özniteliğini DefaultEvent sı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 : UserControl
      
      Imports System.ComponentModel
      
      <DefaultEvent("TextChanged")>
      Public Class ClearableTextBox
      
    3. Kullanıcı denetiminizin tüketicilerine TextBox.TextChanged olayı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 Event
      

      Olayda Browsable özniteliğin bildirildiğine dikkat edin. Browsable bir 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, true olayın görünür olması gerektiğini belirten özniteliğine parametre olarak geçirilir.

    4. Kullanıcı denetiminizin tüketicilerine Text özelliğini kullandıran TextBox.Text adı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 Property
      
    5. Kullanıcı denetiminizin tüketicilerine Title özelliğini kullandıran Label.Text adı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
      
  7. Tasarımcıya ClearableTextBox geri dönün ve denetime çift tıklayarak btnClear olay için Click bir işleyici oluşturun. metin kutusunu temizleyen txtValue iş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 Sub
    
  8. Son 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 ClearableTextBox sonra 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.

  1. Çözüm Gezgini penceresinde, forma çift tıklayarak tasarımcıyı açın. Formun tasarım yüzeyi seçilmelidir.

  2. Formun Size özelliğini 432, 315olarak ayarlayın.

  3. 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.

  4. İkinci bir denetim oluşturmak için ClearableTextBox denetimine çift tıklayın.

  5. Tasarımcıya geri hareket edin ve her ikisini de görebilmek için denetimleri birbirinden ayırın.

  6. Bir denetim seçin ve aşağıdaki özellikleri ayarlayın:

    Mülkiyet Değer
    İsim ctlFirstName
    Yer 12, 12
    Boyut 191, 53
    Başlık First Name
  7. Diğer denetimi seçin ve aşağıdaki özellikleri ayarlayın:

    Mülkiyet Değer
    İsim ctlLastName
    Yer 12, 71
    Boyut 191, 53
    Başlık Last Name
  8. Araç Kutusu penceresine geri dönün, forma bir etiket denetimi ekleyin ve aşağıdaki özellikleri ayarlayın:

    Mülkiyet Değer
    İsim lblFullName
    Yer 12, 252
  9. Ardından, iki kullanıcı denetimi için olay işleyicileri oluşturmanız gerekir. Tasarımcıda ctlFirstName kontrolüne çift tıklayın. Bu eylem, olay için olay işleyicisini TextChanged oluşturur ve kod düzenleyicisini açar.

  10. Tasarımcıya geri dönün ve ikinci olay işleyicisini ctlLastName oluşturmak için denetime çift tıklayın.

  11. 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 Load oluşturur.

  12. Kod düzenleyicisinde adlı UpdateNameLabelbir yöntem ekleyin. Bu yöntem, bir ileti oluşturmak için her iki adı birleştirir ve iletiyi denetime lblFullName atar.

    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
    
  13. Her iki TextChanged olay işleyicisi için yöntemini çağırın 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
    
  14. Son olarak formun UpdateNameLabel olayından Load yö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:

Kullanıcı denetimlerinden oluşturulmuş iki metin kutusu ve bir etiket içeren bir Windows Forms uygulaması.

Metin kutularından birini sıfırlamak için düğmesine basmayı deneyin.