Udostępnij za pośrednictwem


Rozszerzanie istniejącej kontrolki

Jeśli chcesz dodać więcej funkcji do istniejącej kontrolki, możesz utworzyć kontrolkę dziedziczą z istniejącej kontrolki. Nowa kontrolka zawiera wszystkie możliwości i wizualny aspekt kontrolki podstawowej, ale daje możliwość jej rozszerzenia. Jeśli na przykład utworzono kontrolkę dziedziczą Button, nowa kontrolka będzie wyglądać i działać dokładnie tak jak przycisk. Możesz utworzyć nowe metody i właściwości, aby dostosować zachowanie kontrolki. Niektóre kontrolki umożliwiają zastąpienie metody w celu zmiany wyglądu OnPaint kontrolki.

Dodawanie kontrolki niestandardowej do projektu

Po utworzeniu nowego projektu użyj szablonów programu Visual Studio, aby utworzyć kontrolkę użytkownika. W poniższych krokach pokazano, jak dodać kontrolkę użytkownika do projektu:

  1. W programie Visual Studio znajdź okienko Eksplorator projektów. Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Dodaj>klasę.

    Kliknij prawym przyciskiem myszy eksploratora rozwiązań programu Visual Studio, aby dodać kontrolkę użytkownika do projektu Windows Forms

  2. W polu Nazwa wpisz nazwę kontrolki użytkownika. Program Visual Studio udostępnia domyślną i unikatową nazwę, której można użyć. Następnie naciśnij przycisk Dodaj.

    Okno dialogowe Dodawanie elementu w programie Visual Studio for Windows Forms

Po utworzeniu kontrolki użytkownika program Visual Studio otwiera edytor kodu dla kontrolki. Następnym krokiem jest przekształcenie tej kontrolki niestandardowej w przycisk i rozszerzenie go.

Zmienianie kontrolki niestandardowej na przycisk

W tej sekcji dowiesz się, jak zmienić kontrolkę niestandardową na przycisk zliczany i wyświetlający liczbę kliknięć.

Kontrolka niestandardowa formularzy systemu Windows dla platformy .NET

Po dodaniu kontrolki niestandardowej do projektu o nazwie CustomControl1należy otworzyć projektanta kontrolek. Jeśli tak nie jest, kliknij dwukrotnie kontrolkę w Eksplorator rozwiązań. Wykonaj następujące kroki, aby przekonwertować kontrolkę niestandardową na kontrolkę dziedziczą i Button rozszerza ją:

  1. Po otwarciu projektanta kontrolek naciśnij F7 lub kliknij prawym przyciskiem myszy okno projektanta i wybierz polecenie Wyświetl kod.

  2. W edytorze kodu powinna zostać wyświetlona definicja klasy:

    namespace CustomControlProject
    {
        public partial class CustomControl2 : Control
        {
            public CustomControl2()
            {
                InitializeComponent();
            }
    
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
        }
    }
    
    Public Class CustomControl2
    
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
    
            'Add your custom paint code here
        End Sub
    
    End Class
    
  3. Zmień klasę bazową z Control na Button.

    Ważne

    Jeśli używasz języka Visual Basic, klasa bazowa jest zdefiniowana w pliku *.designer.vb kontrolki. Klasa bazowa do użycia w Visual Basic to System.Windows.Forms.Button.

  4. Dodaj zmienną o zakresie klasy o nazwie _counter.

    private int _counter = 0;
    
    Private _counter As Integer = 0
    
  5. Zastąpij metodę OnPaint . Ta metoda rysuje kontrolkę. Kontrolka powinna narysować ciąg na górze przycisku, więc najpierw należy wywołać metodę klasy OnPaint bazowej, a następnie narysować ciąg.

    protected override void OnPaint(PaintEventArgs pe)
    {
        // Draw the control
        base.OnPaint(pe);
    
        // Paint our string on top of it
        pe.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, new PointF(3, 3));
    }
    
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    
        ' Draw the control
        MyBase.OnPaint(e)
    
        ' Paint our string on top of it
        e.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, New PointF(3, 3))
    
    End Sub
    
  6. Na koniec przesłoń metodę OnClick . Ta metoda jest wywoływana za każdym razem, gdy kontrolka jest naciśnięta. Kod zwiększy licznik, a następnie wywoła metodę Invalidate , która wymusza ponowne rysowanie kontrolki.

    protected override void OnClick(EventArgs e)
    {
        // Increase the counter and redraw the control
        _counter++;
        Invalidate();
    
        // Call the base method to invoke the Click event
        base.OnClick(e);
    }
    
    Protected Overrides Sub OnClick(e As EventArgs)
    
        ' Increase the counter and redraw the control
        _counter += 1
        Invalidate()
    
        ' Call the base method to invoke the Click event
        MyBase.OnClick(e)
    
    End Sub
    

    Końcowy kod powinien wyglądać podobnie do następującego fragmentu kodu:

    public partial class CustomControl1 : Button
    {
        private int _counter = 0;
    
        public CustomControl1()
        {
            InitializeComponent();
        }
    
        protected override void OnPaint(PaintEventArgs pe)
        {
            // Draw the control
            base.OnPaint(pe);
    
            // Paint our string on top of it
            pe.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, new PointF(3, 3));
        }
    
        protected override void OnClick(EventArgs e)
        {
            // Increase the counter and redraw the control
            _counter++;
            Invalidate();
    
            // Call the base method to invoke the Click event
            base.OnClick(e);
        }
    }
    
    Public Class CustomControl1
    
        Private _counter As Integer = 0
    
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    
            ' Draw the control
            MyBase.OnPaint(e)
    
            ' Paint our string on top of it
            e.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, New PointF(3, 3))
    
        End Sub
    
        Protected Overrides Sub OnClick(e As EventArgs)
    
            ' Increase the counter and redraw the control
            _counter += 1
            Invalidate()
    
            ' Call the base method to invoke the Click event
            MyBase.OnClick(e)
    
        End Sub
    
    End Class
    

Po utworzeniu kontrolki skompiluj projekt, aby wypełnić okno Przybornik nową kontrolką. Otwórz projektanta formularzy i przeciągnij kontrolkę do formularza. Uruchom projekt i naciśnij przycisk . Każde naciśnięcie zwiększa liczbę kliknięć po jednym. Łączne kliknięcia są drukowane jako tekst w górnej części przycisku.

Okno przybornika programu Visual Studio dla formularzy systemu Windows z wyświetloną kontrolką niestandardową.