Copyright © 2009, Janusz Bonarowski 1
Ć wiczenie VB5.2_menu_bmp
Wykonać aplikację wyświetlającą rysunki za pomocą menu. Aplikację w działaniu przedstawia rys. 1.
Rys. 1. Aplikacja w działaniu
Wykonanie menu
Obiekt menu rozwijalnego pobieramy z paska Toolbox, z grupy Menus & Toolbars, gdzie nazywa się MenuStrip. Jeśli przeniesiemy obiekt MenuStrip na formularz – efekt będzie jak na rys. 2.
Rys. 2. Rozpoczynamy tworzenie menu
(1) W oknie formularza, ale poza samym formularzem, dodany zostanie obiekt MenuStrip o domyślnej nazwie MenuStrip1,
(2) Na formularzu dodany zostanie szablon menu rozwijalnego, do którego możemy wpisywać pozycje menu poziomów głównych i pozycje podmenu.
Copyright © 2009, Janusz Bonarowski 2 Dodawanie pozycji menu rozpoczynamy wpisując ich nazwy w okno z napisem Type Here (wpisz tutaj). Po kliknięciu tego okna – rozwinie się ono w dół i w prawo pozwalając wpisywać pozycje menu na tym samym poziomie jak i pozycje podmenu, rys. 3.
Rys. 3. Wpisywanie pozycji menu i podmenu
Ponieważ planowane do wyświetlenia rysunki, rys. 4, można podzielić na dwie grupy, o nazwach:
• Rysunki 0:
rys01.bmp, rys02.bmp,
• Rysunki 1:
rys11.bmp, rys12.bmp, podobnie zbudujemy menu.
Rys. 4. Rysunki planowane do wyświetlenia
Na najwyższym poziomie umieścimy dwie pozycje: Rysunki 0 i Rysunki 1, a w każdej z tych pozycji umieścimy podmenu z nazwami odpowiednich rysunków z podgrupy – jak na rys. 5.
Rysunki 0 Rysunki 1 Koniec
Rys01 Rys11
Rys02 Rys12
Rys. 5. Propozycja menu
Wykonajmy menu z pozycjami jak na rys. 5, dodając jeszcze element o nazwie Koniec, kliknięcie którego będzie zamykać aplikację.
PictureBox
Obiektem przeznaczonym do wyświetlania rysunków map bitowych, różnych typów, jest obiekt PictureBox, znajdujący się w Toolbox’ie, w grupie Common Controls. Pozostawmy nazwy obiektów takie jakie proponuje Visual Basic. Formularz wraz z obiektami może mieć postać jak na rys. 6.
Copyright © 2009, Janusz Bonarowski 3
Rys. 6. Formularz z MenuStrip i PictureBox
Tworzenie kodu aplikacji
Instrukcja wyświetlająca rysunek o nazwie Rys01.bmp, znajdujący się np. w katalogu:
C:\tkm\gr1.01 – czyli na ścieżce: c:\tkm\gr1.01\rysunki\Rys01.bmp, ma postać:
PictureBox1.Image = _
System.Drawing.Image.FromFile("c:\tkm\gr1.01\rysunki\Rys01.bmp")
Instrukcja ta będzie musiała być wywołana 4 razy dla każdego rysunki, a zmianie ulegnie tylko nazwa rysunku, a właściwie dwa ostatnie znaki nazwy.
Proponuję zatem napisać oddzielną procedurę wyświetlająca rysunek, którego nazwa będzie argumentem tej procedury:
Private Sub ZaladujObraz(ByVal nazwa As String)
' Procedura umieszcza plik rysunku o wskazanej nazwie ' (bez rozszerzenia) w obiekcie PictureBox1
'--- Dim sc As String
' Uwaga!
' Poniżej należy wpisać scieżkę wskazująca lokalizację plików sc = "C:\tkm\gr1.01\VB4.2_menu_bmp\rysunki"
Try
PictureBox1.Image = _
System.Drawing.Image.FromFile(sc & "\" & nazwa & ".bmp") Catch ex As Exception
' Własna obsługa błędu If Err.Number = 53 Then
MsgBox("Na wskazanej ścieżce:" & vbCrLf & sc & vbCrLf & _ "brak pliku rysunku")
End If End Try End Sub
Ponieważ może się zdarzyć, że aplikacja nie odnajdzie rysunku i może zawiesić działanie z powodu nie obsłużonego błędu – wykonajmy własną obsługę błędów posługując się obiektem Err, którego właściwość Number zwraca numer błędu.
Copyright © 2009, Janusz Bonarowski 4
Pełny kod aplikacji
Private Sub ZaladujObraz(ByVal nazwa As String)
' Procedura umieszcza plik rysunku o wskazanej nazwie ' (bez rozszerzenia) w obiekcie PictureBox1
'--- Dim sc As String
' Uwaga!
' Poniżej należy wpisać własną scieżkę wskazująca lokalizację plików sc = "C:\tkm\gr1.01\VB4.2_menu_bmp\rysunki"
Try
PictureBox1.Image = _
System.Drawing.Image.FromFile(sc & "\" & nazwa & ".bmp") Catch ex As Exception
If Err.Number = 53 Then
MsgBox("Na wskazanej ścieżce:" & vbCrLf & sc & vbCrLf & _ "brak pliku rysunku")
End If End Try End Sub
Private Sub Rys01ToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _
Handles Rys01ToolStripMenuItem.Click Call ZaladujObraz("Rys01")
End Sub
Private Sub Rys02ToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _
Handles Rys02ToolStripMenuItem.Click Call ZaladujObraz("Rys02")
End Sub
Private Sub Rys11ToolStripMenuItem_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Rys11ToolStripMenuItem.Click Call ZaladujObraz("Rys11")
End Sub
Private Sub Rys12ToolStripMenuItem_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Rys12ToolStripMenuItem.Click Call ZaladujObraz("Rys12")
End Sub
Private Sub KoniecToolStripMenuItem_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles KoniecToolStripMenuItem.Click Dim Odp As Integer
Odp = MsgBox("Czy rzeczywiście zamknmąć aplikację", _
MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Zamknięcie aplikacji") If Odp = vbYes Then
Application.Exit() End If
End Sub
Procedura powyżej (dla pozycji menu Koniec) pobiera do zmiennej Odp kod przycisku klikniętego w funkcji MsgBox, następnie testuje go i jeśli był to klawisz Tak (jego kod zawarty jest w stałej Visual Basic’a o nazwie vbYes) – zamyka aplikację.