Tworzenie własnego elementu do ToolBoxa (tworzenie plików .dll)

Witam was wszystkich. Dzisiaj pokażę wam jak zrobić swoją własną kontrolkę do toolboxa. Będzie to bardzo prosta kontrolka. Będzie to takie małe wprowadzenie po którym pokażę inne przykłady.  Zrobimy sobie taki label który będzie mógł posiadać przezroczyste tło.  Jak to teraz wygląda:

toolboxcontrol_1Jak tego dokonamy? Otóż wybierzemy sobie obiekt który może posiadać przezroczyste tło, ja wybrałem „Panel” następnie na tym panelu nadrukujemy nasz tekst. Brzmi prosto ale postaramy się o pewne udogodnienia dzięki którym nasz Panel zamieni się bardzo podobny Label :). Otwieramy dwa razy Visual Studio, w jednym oknie będziemy testować naszą kontrolkę a w drugim ją tworzyć. W pierwszym oknie uruchamiamy normalny projekt.

toolboxcontrol_2Dobra, teraz będziemy pracowali na naszej kontrolce. Jak pisałem wcześniej wykorzystamy do tego Panel. Aby włączyć do naszej biblioteki „Panel” wykorzystamy metodę „Inherits” którą wpisuje się po nazwie klasy. Aby móc korzystać z paneli i innych dziedziczonych elementów musimy zaimportować najpierw bibliotekę w której nasze dziedziczone elementy się znajdują. W naszym przypadku „Imports System.Windows.Forms”.

toolboxcontrol_3Jak widzicie nic mi się tutaj nie udało. Aby to naprawić musimy dodać referencje. Klikamy prawym przyciskiem myszy na nasz projekt i wybieramy „Add Reference…”

toolboxcontrol_4Po wybraniu tej opcji pokażę się lista elementów które możemy wykorzystać w naszym programie, te które już są załączone mają pododawane fajeczki, nasz element takowej nie ma więc trzeba mu ją dać.:

toolboxcontrol_5Klikamy „OK” i zrobione, nasze elementy są gotowe do wykorzystania:

toolboxcontrol_6Zmieniły kolor na właściwy to znaczy bez podkreślników. Nasz twór wykorzystuje wszystkie elementy panelu które możemy zablokować albo narzucić użytkownikowi. Zaczynamy od stworzenia konstruktora.

Imports System.Windows.forms
Imports System.Drawing

Public Class Class1
    Inherits Panel
    'stała przechowująca nasz kolor
    Private _kolor As Color = Color.Transparent

    Public Sub New()
        'dzięki tej opcji będziemy mogli ustawić przezroczystość tła naszego panelu
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        'narzucamy kolor tła naszego Panelu
        Me.BackColor = _kolor
    End Sub

End Class

Jak widać powyżej zaimportowałem jeszcze jedną bibliotekę dzięki której mogłem zainicjować zmienną „Color”. Należy teraz utworzyć nasz plik .dll aby to zrobić wciskamy przycisk „F7” lub w zakładce Build-> Build Solution

toolboxcontrol_7Po wykonaniu tej czynności nasz plik .dll powinien utworzyć się w katalogu naszego projektu. Dokładna lokalizacja będzie wypisana w informacji jaką dostaniemy o udanym Buildzie

toolboxcontrol_8I w folderze:

toolboxcontrol_9Mamy już gotowy plik .dll musimy go teraz dodać do naszego toolboxa, przechodzimy do naszego zwykłego projektu i otwieramy toolbox (ja dodałem sobie nową zakładkę o nazwie „Moja kontrolki” można to zrobić w prosty sposób przyciskając „add Tab”) klikamy prawym przyciskiem myszy w zakładce do której chcemy dodać nowy element i wybieramy „Choose Items…”:

toolboxcontrol_10W pierwszej zakładce klikamy przycisk „Browse…” i znajdujemy nasz plik .dll w wyżej wspomnianym katalogu.

toolboxcontrol_11Klikamy „Otwórz” , jeśli wszystko poszło pomyślnie nasz element pojawi się na liście z fajeczką i po wciśnięciu „Ok” powinien pojawić się w toolboxie.

toolboxcontrol_12Dobra mamy kontrolkę, wrzućmy to na ruszt zobaczymy co się stanie.

toolboxcontrol_13Otrzymaliśmy zwykły Panel ale z ustawieniami które zawarliśmy w naszej instrukcji. Zastanawiacie się pewnie po co ta cała heca z otwieraniem dwóch projektów otóż w jednym będziemy tworzyć naszą kontrolkę a w drugim będziemy ją testować, wszystko co zaktualizujemy w jednym projekcie automatycznie zaktualizuje się w drugim. Możecie zrobić sobie test, zmieńcie sobie kolor  z transparent na black i zbudujcie projekt (F7)  następnie przeciągnijcie swoją kontrolkę na formę a zauważycie, że kolor będzie inny niż poprzednio. Dobra teorie mamy za sobą. Każdy element jeśli ustawimy mu kolor na transparent będzie przezroczysty tylko dla obiektu który jest dla niego typu „Parent”. jak to wygląda w praktyce:

toolboxcontrol_14Musimy więc dodać do naszego panelu kwadrat w którym umieścimy nasz tekst, wielkość naszego panelu i jego położenie będziemy mogli określać dowolnie tak jak wielkość wpisanego w niego kwadratu. Musimy najpierw utworzyć metodę która utworzy nam ten kwadra, wygląda ona tak:

Imports System.Windows.forms
Imports System.Drawing

Public Class Class1
    Inherits Panel
    'stała przechowująca nasz kolor
    Private _kolor As Color = Color.Transparent
    'określamy nasz obiekt
    Dim rect As New Rectangle(0, 0, 50, 50)

    Public Sub New()
        'dzięki tej opcji będziemy mogli ustawić przezroczystość tła naszego panelu
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        'narzucamy kolor tła naszego Panelu
        Me.BackColor = _kolor
    End Sub

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        e.Graphics.DrawRectangle(Pens.Black, rect)
    End Sub

End Class

Na naszej formie będzie to wyglądać tak:

toolboxcontrol_15Teraz musimy mieć możliwość ustawienia położenia naszego kwadratu. Jego wielkością nie będziemy się przejmować ponieważ będzie ona automatycznie dopasowywać się do tekstu w zależności od naszych wyborów, zaraz pokażę wam o co chodzi.

Imports System.Windows.forms
Imports System.Drawing


Public Class Class1
    Inherits Panel
    'stała przechowująca nasz kolor
    Private _kolor As Color = Color.Transparent
    'określamy nasz obiekt
    Dim rect As New Rectangle
    'Zmienne dotyczące naszego kwadratu
    Dim rect_location As Point

    'konstruktor
    Public Sub New()
        'dzięki tej opcji będziemy mogli ustawić przezroczystość tła naszego panelu
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        'narzucamy kolor tła naszego Panelu
        Me.BackColor = _kolor
        'określamy wstępne wartości
        rect_location = New Point(0, 0)
    End Sub


    Public Overloads Property Lokalizacja_kwadratu() As Point
        Get
            Return rect_location
        End Get
        Set(value As Point)
            rect_location = value
            Refresh()
        End Set
    End Property

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        rect.Size = Me.Size
        rect.Location = rect_location

        e.Graphics.DrawRectangle(Pens.Black, rect)
    End Sub

End Class

dzięki tej metodzie będziemy mogli we właściwościach naszego obiektu dowolnie sterować położeniem naszego kwadratu:

toolboxcontrol_18Dodajemy teraz tekst:

Imports System.Windows.forms
Imports System.Drawing


Public Class Class1
    Inherits Panel
    'stała przechowująca nasz kolor
    Private _kolor As Color = Color.Transparent
    'określamy nasz obiekt
    Dim rect As New Rectangle
    'Zmienne dotyczące naszego kwadratu
    Dim rect_location As Point
    'zmienne dotycząte tekstu
    Dim _text As String
    Dim _Font As Font
    Dim _text_color As Color

    'konstruktor
    Public Sub New()
        'dzięki tej opcji będziemy mogli ustawić przezroczystość tła naszego panelu
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        'narzucamy kolor tła naszego Panelu
        Me.BackColor = _kolor
        'określamy wstępne wartości
        rect_location = New Point(0, 0)
        _text = "tekst1"
        _Font = Me.Font
        _text_color = Color.Black
    End Sub


    Public Overloads Property Lokalizacja_kwadratu() As Point
        Get
            Return rect_location
        End Get
        Set(value As Point)
            rect_location = value
            Refresh()
        End Set
    End Property


    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        rect.Size = Me.Size
        rect.Location = rect_location

        e.Graphics.DrawString(_text, _Font, New SolidBrush(_text_color), rect)
        e.Graphics.DrawRectangle(Pens.Black, rect)
    End Sub

End Class

Efekt tego działania nie jest jeszcze powalający ale poczekajcie jeszcze chwilę. Wygląda to tak:

toolboxcontrol_19

Teraz damy możliwość wpisania własnego tekstu przez użytkownika i kilku innych opcji :

Imports System.Windows.Forms
Imports System.Drawing


Public Class Class1
    Inherits Panel
    'stała przechowująca nasz kolor
    Private _kolor As Color = Color.Transparent
    'określamy nasz obiekt
    Dim rect As New Rectangle
    'Zmienne dotyczące naszego kwadratu

    Dim rect_location As Point
    'zmienne dotycząte tekstu
    Dim _text As String
    Dim _Font As Font
    Dim _text_color As Color

    Dim rect_widoczna_ramka As Boolean

    'konstruktor
    Public Sub New()
        'dzięki tej opcji będziemy mogli ustawić przezroczystość tła naszego panelu
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        'narzucamy kolor tła naszego Panelu
        Me.BackColor = _kolor
        'określamy wstępne wartości
        rect_location = New Point(0, 0)
        _text = "tekst1"
        _Font = Me.Font
        _text_color = Color.Black
        rect_widoczna_ramka = True
    End Sub


    Public Overloads Property a_Lokalizacja_kwadratu() As Point
        Get
            Return rect_location
        End Get
        Set(value As Point)
            rect_location = value
            Refresh()
        End Set
    End Property

    Public Overloads Property a_Czcionka_tekstu() As Font
        Get
            Return _Font
        End Get
        Set(value As Font)
            _Font = value
            Refresh()
        End Set
    End Property

    Public Overloads Property a_Tekst() As String
        Get
            Return _text
        End Get
        Set(value As String)
            _text = value
            Refresh()
        End Set
    End Property

    Public Overloads Property a_Kolor_tekstu() As Color
        Get
            Return _text_color
        End Get
        Set(value As Color)
            _text_color = value
            Refresh()
        End Set
    End Property

    Public Overloads Property a_Czy_ramka_ma_byc_widoczna() As Boolean
        Get
            Return rect_widoczna_ramka
        End Get
        Set(value As Boolean)
            rect_widoczna_ramka = value
            Refresh()
        End Set
    End Property


    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        rect.Size = Me.Size
        rect.Location = rect_location
        e.Graphics.DrawString(_text, _Font, New SolidBrush(_text_color), rect)

        If rect_widoczna_ramka = True Then
            e.Graphics.DrawRectangle(Pens.Black, rect)
        Else
            e.Graphics.DrawRectangle(Pens.Transparent, rect)
        End If

    End Sub

End Class

Do każdej metody dodałem „a_” aby wyświetlały się jako pierwsze. Teraz przejdziemy do utworzenia naszego tekstu.

1. Dodajemy naszą kontrolkę i mniej więcej wyśrodkowujemy tekst:

toolboxcontrol_202. Dodajemy/przenosimy kolejną na tą pierwszą, zmieniamy jej szerokość i ustawiamy ją mniej więcej po środku tej pierwszej:

toolboxcontrol_213. Zmieniamy kolor ramek na transparent i proszę:

toolboxcontrol_22Wszystko pięknie wygląda. Dzięki temu, że sami zrobiliśmy tą kontrolkę z łatwością przyjdzie nam jej obsługa. Aby zmienić nazwę kontrolki w toolboxie należy zmienić nazwę klasy z class1 na jakąś nam odpowiadającą. Pełen projekt do pobrania tutaj: Toolbox_control

Jeśli nie udał wam się jakiś krok z początku artykułu lub chcecie zobaczyć jak ja robiłem tą kontrolkę to zapraszam do oglądania filmu poniżej:

Permalink do tego artykułu: https://visualmonsters.cba.pl/tworzenie-wlasnego-elementu-do-toolboxa-tworzenie-plikow-dll/

1 pings

  1. […] « Tworzenie własnego elementu do ToolBoxa (tworzenie plików .dll) […]

Dodaj komentarz

Twój adres email nie będzie publikowany.