9 Vb.Net kontrolki i ich właściwości

Kontrolki


Po ostatnich trudnych i męczących tematach nadszedł czas na chwilę relaksu! Dzisiejszy temat naszego poradnika specjalnie wybrałem na rozluźnienie :) Po co bez końca zanudzać pętlami, instrukcjami, zmiennymi i operatorami. Teraz się trochę pobawimy. Mam rację ? tak myślałem :)
Kontrolek różnego rodzaju jest cała masa. Co więcej sporo jest również kontrolek niestandardowych. My w tym poradniku zajmiemy się jedynie niewielką ich częścią, omówimy sobie te najpopularniejsze. Poniżej znajduje się lista pospolitych kontrolek, omówimy część z nich i kilka takich których na tej liście nie ma. Żeby zobaczyć wszystkie trzeba rozwinąć pole All Windows Forms.

Label

W poprzednich poradnikach poznaliśmy już kontrolkę Label. Jest to etykieta która ma zadanie wyświetlać nam jakieś dane. Właściwość, która odpowiada za wyświetlanie przez nią tekstu jest Text. W kodzie odnosimy się do niej tak:
Label1.Text = "jakiś ciąg znaków"
 
W Label możemy wyświetlić nie tylko ciąg znaków, ale także zawartość jakiejś zmiennej
Label1.Text = zmienna1

Oprócz powyższego można również połączyć wiele ciągów znaków a następnie wyświetlić je w całości w naszej etykiecie. Spróbujmy zatem:
        Dim ciag1 As String = "Dziś "
        Dim ciag2 As String = "rano "
        Dim ciag3 As String = "jadłem "
        Dim ciag4 As String = "śniadanie."
        Label1.Text = ciag1 & ciag2 & ciag3 & ciag4
Label wówczas wyświetli nam tekst "Dziś rano jadłem śniadanie". No dobrze mamy już Label, mamy już w nim jakiś tekst, może zmienimy w nim jakieś inne jego właściwości? Czemu nie! Napiszmy kod:
        Dim ciag1 As String = "Dziś "
        Dim ciag2 As String = "rano "
        Dim ciag3 As String = "jadłem "
        Dim ciag4 As String = "śniadanie."
        Label1.Text = ciag1 & ciag2 & ciag3 & ciag4
        Label1.ForeColor = Color.DarkRed
        Label1.BackColor = Color.Gold
        Label1.Font = New Font(Label1.Font, FontStyle.Bold)
        Label1.TextAlign = ContentAlignment.MiddleCenter
        Label1.BorderStyle = BorderStyle.Fixed3D

I co się stało ? Nasz smuty tekst nabrał zupełnie nowego życia. Ma teraz czerwoną czcionkę, złote tło, wyśrodkowany i wycentrowany oraz dostał w prezencie piękną trójwymiarową ramkę. Chyba tego mu było trzeba ! Zobaczmy jak on wygląda:

Poznaliśmy zatem kilka najważniejszych jego właściwości:
  • Text - odpowiadający za wyświetlany tekst
  • ForeColor - odpowiadający za kolor czcionki
  • BackColor - odpowiadający za kolor tła
  • TextAlign - odpowiadający za wyrównanie tekstu
  • BorderStyle - odpowiadający za rodzaj obramowania
Dodatkowo do jednych z najważniejszych właściwości większości kontrolek należą:
  • Enabled - odpowiadający za możliwośc interakcji z użytkownikiem
  • Visible - odpowiadający za to czy kontrolka jest widoczna dla użytkownika czy nie.

TextBox

TextBox (pole tekstowe) to kontrolka, która służy przede wszystkim do przechwytywania wprowadzonego do niego tekstu. TextBox podobnie jak Label posiada wyżej wymienione właściwości. Napiszmy kod który wyświetli w Label to co napisaliśmy w TextBox'ie  i dodajmy go do naszego Buttona:
 Label1.Text = TextBox1.Text

Po wpisaniu do TextBox'a jakiegoś tekstu możemy wyświetlić go w Label naciskając na nasz Button.

TextBox to bardzo wygodna metoda wprowadzania danych do programu. Powyżej wykonaliśmy bezpośrednie przeniesienie ciągu z jednej kontrolki do drugiej. Teraz w ramach ćwiczeń przeniesienie wykonamy za pomocą zmiennej.
        Dim Z1 As String
        Z1 = TextBox1.Text
        Label1.Text = Z1

I co tutaj się stało ? Zadeklarowaliśmy sobie zmienną Z1 , następnie zmiennej Z1 przypisaliśmy ciąg pobrany z TextBox'a. Ostatnia linia przypisuje do Label1.Text wartość zmiennej Z1. Proste? też tak myślę :)
TextBox posiada dodatkową właściwość której nie posiada Label, to jest ReadOnly, może ona posiadać 2 parametry True lub False. Ustawienie dla TextBoxa właściwości ReadOnly pozbawia go możliwości edycyjnych i robi z niego zwykły wyświetlacz danych taki jak Label.

Button

Chyba nie muszę już go przedstawiać ani pokazywać jak wygląda. Jest to najzwyklejszy przycisk, który jest najczęstszym elementem interakcji programu z użytkownikiem. Do najczęściej zmienianych właściwości Button'a są:
  • Enabled
  • Visible
  • Text
  • Font
  • ForeColor
  • BackColor
  • Image - można wstawić obraz jako tło
  • FlatStyle - styl przycisku
Nie będę omawiał właściwości, które były już omawiane wcześniej dla innych kontrolek.

ProgressBar

ProgressBar (pasek postępu) często go widzimy podczas ładowania strony, instalowania programów, pobierania plików z internetu. My również możemy go wykorzystać w naszych programach ! Za pomocą pętli For będziemy oglądać postęp wykonywania programu.Na formę wstawiamy Button i Progressbar. Teraz ustawmy sobie nasz ProgressBar tak, żeby jego wartość maksymalna była równa 10. W tym celu zaznaczamy go na formie i edytujmy właściwość Maximum naszego ProgressBar w "Properties" po lewej stronie. Maximum odpowiada za wartość szczytową, po której kontrolka osiąga swój maksymalny poziom postępu.

W procedurze Button'a umieścimy taki kod:
        For i = 0 To 10
            ProgressBar1.Value = i
            MessageBox.Show("Teraz jesteśmy na kroku " & i)
        Next

Po naciśnięciu Button'a rozpoczniemy pętlę, która będzie przekazywała zmienną i do ProgressBar.Value następnie wyświetli się komunikat, który powie nam, na którym miejscu pętli się obecnie znajdujemy.
Ktoś może się zapytać: ale skąd wzięła się ta zmienna i ?? Przecież nigdzie nie została zadeklarowana! No właśnie sam się zastanawiam, ale wygląda na to, że deklarując pętlę zmienna ta tworzy się sama i nie trzeba jej wcześniej jawnie deklarować.

Tworząc przykład o ProgressBar przyszło mi do głowy, żeby w tym miejscu pokazać wam jeszcze jedną ciekawą właściwość pętli For ponieważ tu można będzie naocznie zobaczyć jak ona działa. Chodzi mi o Parametr Step (krok) zobaczmy to na przykładzie poniższego kodu:
        For i = 0 To 10 Step 2
            ProgressBar1.Value = i
            MessageBox.Show("Teraz jesteśmy na kroku " & i)
        Next
Uruchamiając program od razu rzuciło nam się w oczy, że pętla For przeskakuje o 2 pozycje do przodu ! To jest właśnie krok pętli For.
Dobrze ale zapomnieliśmy powiedzieć o innych właściwościach tej kontrolki. Poznaliśmy już właściwość Value oraz Maximum, wymieńmy sobie jeszcze kilka innych ważnych.
  • Minimum - odpowiada za wartość przy której kontrolka pokazuje brak postępu czyli jest pusta
  • Step - zamiast Value można ustawić własność Step, która będzie wskazywać, o ile kontrolka ma aktualizować wartość Value w każdym kroku, a następnie wywołać metodę PerformStep kontrolki ProgressBar, która zwiększy wartośc Value o podany krok.
  • Style - określa wygląd paska postępu naszej kontrolki

PictureBox

Kontrolka PictureBox służy do wyświetlania w niej obrazów. Dostarcza też obiekt klasy Graphics, którym w trakcie trwania programu można rysować różne wzory.
Jego najważniejszymi właściwościami są :
  • Image - właściwość przypisuje obraz
  • SizeMode - położenie obrazu
  • BorderStyle 
Przykładowy wygląd formy ze wstawionym PictureBoxem i jakąś grafiką:

CheckBox

CheckBox to kontrolka wyświetlająca pole, które użytkownik może zaznaczyć lub odznaczyć.
W zależności od tego co będziemy chcieli uzyskać zaznaczając/odznaczając CheckBox tak trzeba będzie zaprogramować jego właściwość Checked. Wstawmy na formę tylko 2 CheckBoxy, wybieramy teraz na liście ich zdarzeń procedurę CheckedChanged. Automatycznie utworzy się nam procedura obsługi tego zdarzenia taka jak poniżej: Można także kliknąć w kontrolkę dwukrotnie na formie w zakładce design. Efekt będzie ten sam.
    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged

    End Sub
Zróbmy więc to samo dla drugiej kontrolki.
Teraz napiszemy dla nich kod:
    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked = True Then
            CheckBox2.Checked = False
        ElseIf CheckBox1.Checked = False Then
            CheckBox2.Checked = True
        End If

    Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
        If CheckBox2.Checked = True Then
            CheckBox1.Checked = False
        ElseIf CheckBox2.Checked = False Then
            CheckBox1.Checked = True
        End If
    End Sub

Uruchamiamy program i co się dzieje ? Zaznaczenie jednego pola powoduje odznaczenie drugiego i na odwrót. Możemy powiedzieć że udało nam się oprogramować taką kontrolkę. Oczywiście jej zastosowanie jest szersze i niekoniecznie musi służyć do zaznaczania/odznaczania innych CheckBox'ów. To, jak ją wykorzystamy zależy tylko i wyłącznie od naszej wyobraźni :) Najczęstszym miejscem występowania CheckBox'ów są ustawienia programów, gdzie możemy zaznaczyć właściwe dla nas opcje.
Poznaliśmy zatem jej najważniejszą właściwość Checked, inne to na przykład:
  • Text
  • BackColor
  • ForeColor
  • Enabled
  • Visible
  • CheckAlign - zmieniające umiejscowienie tekstu dookoła pola

RadioButton

RadioButton to rodzaj kontrolki podobnej nieco do CheckBox ale tutaj zaznaczenie jednej kontrolki powoduje odznaczenie pozostałych. RadioButton'y umieszczone w tym samym kontenerze jakim jest np forma, nie pozwalają na zaznaczenie kilku "opcji do wyboru" bo do tego sprowadza się rola RadioButton'ów. RadioButton tak jak CheckBox posiada podobne właściwości i najwazniejszą dla nich wspólnie jest właściwość Checked.

GroupBox

GroupBox to kontrolka wyświetlająca ramkę z napisem. Służy głównie do celów dekoracyjnych gdyż tworzy atrakcyjny wizualnie obszar, w którym możemy przechowywać jakieś kontrolki. Jako, że GroupBox jest również kontenerem to umieszczone w nim kontrolki RadioButton'ów tworzą niezależną od innych RadioButtonów grupę, którą można niezależnie zaznaczać.
Dla celów edukacyjnych stwórzcie sobie na formie 2 takie GroupBox'y i umieśćcie w każdym z nich po kilka RadioButton'ów. Uruchomcie program i zobaczcie jak się zachowują.

ListBox

Przy okazji tłumaczenia pętli For w poradniku nr 7 przedstawiłem wam kontrolkę ListBox. Teraz omówimy jej właściwości. Jedną z najważniejszych właściwości ListBox'a jest Items.Add dzięki niemu możemy do naszego ListBox'a dodawać nowe wiersze z danymi. Wstawcie sobie na formę ListBox, TextBox i jeden Button. Do Buttona dodajemy kod:
        ListBox1.Items.Add(TextBox1.Text)
        TextBox1.Clear()
        TextBox1.Focus()
Uruchamiamy program i co się dzieje ? Wpisany tekst do TextBox'a po przyciśnięciu przycisku ląduje w ListBox'ie. Ale to nie wszystko ! TextBox się wyczyścił i wrócił do niego Focus (kursor). Tak można pracować ! ale to nie wszystko. Dodajmy na formę jeszcze jeden ListBox i drugi Button.
W kodzie drugiego Buttona wpisujemy:
ListBox2.Items.AddRange(ListBox1.Items)
I co nam z tego wyszło ? Po wpisaniu kilku wierszy do ListBox1 możemy jednym poleceniem skopiować je wszystkie do drugiego ListBox'a ! Prawda, że proste ? Zgadza się !

Poznaliśmy zatem drugą bardzo ważną właściwość ListBox'a - Items.AddRange
ListBox posiada jeszcze kilka innych ważnych właściwości:
  • SelectionMode - określa jak użytkownik może zaznaczać tekst (One, Multiple)
  • Sorted - określa czy kontrolka sortuje elementy
  • MultiColumn - Jeśli kontrolce ustawimy wartość True, nie pokaże ona pionowego paska przewijania, ale w zamian jeśli jest dużo elementów to będą one pokazywane w osobnych kolumnach
  • SelectedItem - zwraca referencje do zaznaczonego elementu lub Nothing jeśli nic nie zostało wybrane
  • SelectedIndex - Zwraca indeks elementu licząc od zera ( pierwszy element na liście będzie miał indeks 0)

 Timer

 Timer to taka kontrolka, która zgłasza regularne zdarzenia Tick dzięki czemu program może wykonywać jakieś instrukcje w regularnych odstępach czasowych. Do najważniejszych właściwości tej kontrolki należy Interval. Dzięki niej kontrolkę można zaprogramować na na określony interwał czasowy, który wyrażony jest w milisekundach.
Timer posiada dwie ważne dla nas metody: Start oraz Stop, które ustawiają właściwość Enabled odpowiednio na True lub False.

Najprostszym przykładem zastosowania kontrolki jest dodawanie wartości do zmiennej przy każdym zdarzeniu Tick. Żeby to zobaczyć wstawmy sobie na formę kontrolkę Timer, Label oraz 2 Button'y. Button1 opiszmy "Start" (we właściwość Text wpisujemy Start) a Button2 "Stop". Kontrolce Timer ustawmy Interval na 100ms (0.1s) Timer, dodaje się na dole ekranu, w kontenerze kontrolek nie pojawiających się bezpośrednio na formie. Napiszmy kod:
    Private val As Integer
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        val += 1
        Label1.Text = val
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Timer1.Start()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Timer1.Stop()
    End Sub
Po uruchomieniu aplikacji i naciśnięciu przycisku start widzimy jak Timer dodaje 1 zmiennej Val przy każdym zdarzeniu Tick. Naciśnięcie Stop przerywa dodawanie. Można więc sobie uzmysłowić, że kontrolka ta może mieć tysiące zastosowań. Kika z nich pokaże przy okazji tworzenia następnych działów.

MenuStrip

MenuStrip znamy chociażby z naszego środowiska pracy Visual Studio, jest to tzw. menu programu. My również w naszym programie możemy takie menu zrobić. Wystarczy kontrolkę MenuStrip przeciągnąć na formę i dodawać w niej interesujące nas funkcje. Zostawmy nasz kod z Timer'a na formie łacznie ze wszystkimi kontrolkami. Następnie dodajmy do MenuStrip nazwę menu "Opcje" oraz 3 pozycje w podmenu:
  • Start
  • Stop
  • Zamknij program
Powinno wyglądać to mniej więcej w ten sposób:
Klikając podwójnie LPM na podmenu start w widoku designer'a otworzy nam się kod:
    Private Sub StartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StartToolStripMenuItem.Click

    End Sub
Zróbmy to samo dla wszystkich 3 elementów podmenu i napiszmy dla nich kod:
    Private Sub StartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StartToolStripMenuItem.Click
        Timer1.Start()
    End Sub

    Private Sub StopToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StopToolStripMenuItem.Click
        Timer1.Stop()
    End Sub

    Private Sub ZamknijProgramToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZamknijProgramToolStripMenuItem.Click
        Me.Close()
    End Sub
Teraz uruchamiamy program, wchodzimy do menu Opcje i naciskamy Start... i co? hurra działa !
Ostatnim nowym elementem dla nas jest instrukcja Me.Close(), jest to instrukcja, która jak łatwo się domyślić zamyka nasz program. Nierzadko będziemy z niej korzystać więc warto ją poznać.

ContextMenuStrip

Podobną kontrolką do MenuStrip jest ContextMenuStrip, różni się ona tym, że przypisywana jest konkretnie do innej kontrolki i wywoływana jest prawym przyciskiem myszy. Wróćmy ponownie na naszą formę i dodajmy kontrolkę ContextMenuStrip do naszej formy. Podobnie jak MenuStrip i Timer pojawia się ona na dole w kontenerze kontrolek a nie na samej formie. Spójrzmy:

Zaznaczmy nasza kontrolkę i dodajmy do jej menu dwa podmenu Start i Stop. Podobnie jak w ContextMenuStrip klikamy 2x LPM na każdą pozycję i dodajemy do nich kod:
    Private Sub StartToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles StartToolStripMenuItem1.Click
        Timer1.Start()
    End Sub

    Private Sub StopToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles StopToolStripMenuItem1.Click
        Timer1.Stop()
    End Sub
Ale to jeszcze nie wszystko, jak już wspomniałem na początku, ta kontrolka musi zostać przypisana do innej kontrolki lub do formy. My przypiszemy ją do Label. Żeby to zrobić zaznaczamy nasz Label i przechodzimy do listy właściwości (properties) po prawej stronie. Tam znajdujemy Właściwość ContextMenuStrip i przypisujemy jej nasz utworzony ContextMenuStrip1. Teraz gdy użytkownik kliknie prawym klawiszem myszy na kontrolce Label to wyświetli mu się menu kontekstowe w opcjami do wyboru - w naszym przypadku Start i Stop.

Teraz dopiero możemy uruchomić program i sprawdzić czy wszystko jest w porządku.
Wszystko działa ? jeśli wszystko zrobiliście według moich wskazówek to wszystko powinno być w porządku.


Dość już o kontrolkach, jeśli chcecie poznać pozostałe, to możecie je wstawiać na formę, sprawdzać co one robią i jakie mają własności, do czego oczywiście gorąco zachęcam.

Następne działy tego poradnika będą już bardziej praktyczne, muszę jeszcze tylko zrobić dopełniający dział o konwersji danych i o działaniach arytmetycznych.
Jak przez to przebrniemy to będzie można zacząć tworzyć już pierwsze bardziej rozbudowane programy.


Utworzono 09.09.2015

Brak komentarzy:

Prześlij komentarz