Ćwiczenie VB3.4 Struktura Try...Catch, obiekt Err, metoda Err.Raise (Strukturalna obsługa wyjątków)

Podobne dokumenty
Tablice, DataGridView

DataGridView. Aby dodawać kolumny wybieramy z listy zadań Add Column..., co wywoła okno dodawania kolumn, rys. 2. Rysunek 1

Zadanie. Menu Plik niech posiada dwie pozycje: Tekstowy i Excel, a każda z nich niech posiada dwie pozycje Otwórz i Zapisz, patrz rys. 2.

Aplikacje geodezyjne

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Visual Basic Debugging and Error Handling

Klasa bazowa i klasy potomne - doskonalenie umiejtnoci projektowania i wykorzystania klas (45 min)

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Platforma.NET laboratorium 1. Visual Basic.NET podstawowe elementy języka. Wykonanie warunkowe If End If

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Ten odcinek Akademii PC Kuriera poświęcony zostanie tworzeniu i wykorzystaniu funkcji i procedur w języku Visual Basic.NET.

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Class1.vb. _Dlugosc_stopnia = value End Set End Property Public Property Faza As Single Get Return _Faza End Get

Delphi Laboratorium 3

LibreOffice Calc VBA

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

Podstawy informatyki

Praca z bazą danych. Rysunek 1. Projekt tabeli UZYTKOWNIK bazy KURSY

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Palindromy. Przykładowe rozwiązanie

Materiały do laboratorium MS ACCESS BASIC

Obsługa blędów i zewnętrznych plików

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Instrukcje cykliczne (pętle) WHILE...END WHILE

Visual Basic: Tablice, sortowanie, r. ak. 2014/2015

XII. Warunek wielokrotnego wyboru switch... case

Technologie informacyjne

Arkusze kalkulacyjne i VBA

Tworzenie zespołu. Ustalenie aktualnego projektu. Laboratorium Technik Komputerowych I, Inventor, ćw. 4

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

MsgBox(Komunikat [, Przyciski] [, Tytuł] [, PlikHelp, HelpContext])

Bazy Danych. Wykład VII Makropolecenia. Copyright by Arkadiusz Rzucidło 1

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Ćwiczenie laboratoryjne. Oprogramowanie i badanie stosu lub kolejki w środowisku Visual Basic 2005

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

15. Funkcje i procedury składowane PL/SQL

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Instrukcje sterujące. Programowanie komputerowe

Podstawy i języki programowania

W Y ś S Z A S Z K O Ł A I N F O R M A T Y K I

Algorytmika i Programowanie VBA 1 - podstawy

Aplikacja MDI. Rysunek 1. Tworzenie nowego projektu

Visual Basic dla AutoCAD

3 Delegacje. 3.1 Tworzenie delegacji. 3.2 Skojarzenie delegacji z procedurą czy funkcją

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

Visual Basic for Applications. Wstęp

Zaawansowane aplikacje internetowe

wprowadź poniższy kod (Uwaga: powyższy kod powinien zostać zapisany w dwóch liniach):

Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA

1 Algorytmy. Algorytmy i VBA. 1. Zapoznaj się z symboliką schematów blokowych.

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Procedury i funkcje. Programowanie komputerowe

Instrukcja laboratoryjna nr.4

EKSPLOATACJA SYSTEMÓW TECHNICZNYCH - LAB. Wprowadzenie do zajęć

lekcja 8a Gry komputerowe MasterMind

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Pętle instrukcje powtórzeo

Przeciąganie po profilach, Dodanie/baza przez wyciągnięcie po ścieŝce

Instrukcja warunkowa i złoŝona.

Informatyka II. Laboratorium Aplikacja okienkowa

Ilość cyfr liczby naturalnej

Cw.12 JAVAScript w dokumentach HTML

Aplikacje w środowisku VBA. Visual Basic for Aplications

Program 14. #include <iostream> #include <ctime> using namespace std;

Wprowadzenie do programowania w VBA

Technologia informacyjna programowanie Janusz Uriasz

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

Działki Przygotowanie organizacyjne

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

Przedmiot: Informatyka w inżynierii produkcji Forma: Laboratorium Temat: Zadanie 5. MessageBox, InputBox, instrukcja Select Case i instrukcje pętli.

Języki skryptowe w programie Plans

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Projekt ZSWS. Instrukcja uŝytkowania narzędzia SAP Business Explorer Analyzer. 1 Uruchamianie programu i raportu. Tytuł: Strona: 1 z 31

JAVAScript w dokumentach HTML (2)

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

COMARCH IT AKADEMIA. Programista VBA w Microsoft Excel (microbootcamp)

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Visual Basic.NET. Æwiczenia

Trik 1 Identyfikator klienta generowany za pomocą formuły

SSK - Techniki Internetowe

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

BAZY DANYCH MAKRA I PRZYCISKI. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

Laboratorium Programowania Kart Elektronicznych

Utworzenie funkcji użytkownika w Visual Basic

Warsztaty dla nauczycieli

Aplikacja sieciowa kalkulatora macierzowego zadanie za 10 punktów

AUTOMATYZACJA PRACY Z UŻYCIEM MAKR. Tom XII NPV WSP.KORELACJI ROZKŁ.EXP JEŻELI COS KOMÓRKA VBA DNI.ROBOCZE ILOCZYN LOG SUMA CZY.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA 4 ŚRODKI DYDAKTYCZNE

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19

BAZY DANYCH Panel sterujący

Przedmiot: Informatyka w inżynierii produkcji Forma: Laboratorium Temat: Zadanie 4. Instrukcja warunkowa.

Transkrypt:

Ćwiczenie VB3.4 Struktura..., obiekt Err, metoda Err.Raise (Strukturalna obsługa wyjątków) Jeśli wpiszemy do okna tekstowego zamiast cyfr litery (np. abc), a następnie spróbujemy ten ciąg znaków przekonwertować na liczbę - instrukcją, np. CSng(txtLiczba.Text) lub Single.Parse(txtLiczba.Text) działanie programu zostanie przerwane i wyświetlony zostanie komunikat Konwersja z ciągu abc na typ Single nie jest prawidłowa przy instrukcji A = CSng(TextBox1.Text) lub Nieprawidłowy format ciągu wejściowego przy instrukcji A = Single.Parse(TextBox1.Text) patrz rys. 1 i 2. Rysunek 1 Rysunek 2 Copyright 2014, mgr inŝ. Janusz Bonarowski 1

Taką sytuację nazywamy błędem czasu wykonania (run time error), a środowisko pracy Visual Basic określa ją jako nie obsłuŝony wyjątek. Po takim komunikacie program zatrzymuje się (zawiesza) - nie moŝe być dalej wykonywany i naleŝy go przerwać. Aby program nie przerywał działania w sposób nieoczekiwany przez uŝytkownika lecz pozwolił dalej np. wprowadzać dane i posługiwać się nim - stosujemy własna strukturę obsługi błędów (tzw. wyjątków). Struktura ta ma postać: ex As Exception. 'Własna obsługa błędów. Finally 'Blok opcjonalny. 'Instrukcje wykonywane niezaleŝnie od tego 'czy błąd się pojawił czy nie pojawił. End Obiekt ex jest to obiekt wyjątek, którego właściwości moŝemy wykorzystywać. Często strukturę tę skracamy opuszczając blok Finally: ex As Exception 'Własna obsługa błędów. End lub jeszcze bardziej upraszczamy gdy nie zamierzamy korzystać z obiektu ex: 'Własna obsługa błędów. End Najprostsze wykorzystanie struktury... i jej efekt na rys. 3: A = CSng(TextBox1.Text) TextBox3.Text = "A = " & A.ToString MsgBox("Proszę poprawić dane", _ MsgBoxStyle.Information, _ "Błąd danych") End Rysunek 3 Copyright 2014, mgr inŝ. Janusz Bonarowski 2

Po odczytaniu takiego komunikatu moŝemy poprawić wpisana wartość, kliknąć przycisk i program będzie kontynuował działanie. Obiekt ex (Exception - wyjątek) Aby posłuŝyć się obiektem ex (Exception - wyjątek) moŝemy wykorzystać jego właściwości Message lub wprost wyświetlić metodą ToString jego zawartość. Kod n = CInt(TextBox1.Text) TextBox3.Text = "N = " & n.tostring ex As Exception 'Komunikat jak na rys. 4 MsgBox("ex.Message: " & ex.message, MsgBoxStyle.Information, _ "Własna obsługa błędów 1") 'Komunikat jak na rys. 5 MsgBox("ex.ToString: " & ex.tostring, MsgBoxStyle.Exclamation, _ "Własna obsługa błędów 1") End przy braku danych w oknie tekstowym wyświetla komunikaty: Rysunek 4. Własna obsługa błędów 1, ex.message Rysunek 5. Własna obsługa błędów 2, ex.tostring Który rodzaj komunikatu wybrać autor programu moŝe zadecydować sam (podpowiadam, Ŝe wersja 1, rys. 4, jest bardziej zrozumiała). Copyright 2014, mgr inŝ. Janusz Bonarowski 3

Obiekt Err Gdy pojawia się błąd czasu wykonania wie o nim wszystko obiekt Err. MoŜemy z tej wiedzy skorzystać. UŜytecznymi dla nas właściwościami tego obiektu są: Err.Number zwraca numer błędu Err.Description zwraca krótki opis błędu. Np. kod: A = CSng(TextBox1.Text) TextBox3.Text = "A = " & A.ToString MsgBox("Err.Number = " & Err.Number & vbcrlf & _ "Err.Description = " & Err.Description) End wyświetli komunikat jak na rys. 6 (porównaj z rys. 4) Rysunek 6 A jeśli komunikat zredagujemy jak w kodzie poniŝej: MsgBox("Proszę poprawić dane." & vbcrlf & _ Err.Description, MsgBoxStyle.Information, "Błąd nr " & Err.Number) UŜytkownik zobaczy go jak na rys. 7 Rysunek 7 Copyright 2014, mgr inŝ. Janusz Bonarowski 4

Komunikat zaleŝny od numeru błędu W bloku instrukcji wykonywanych przy błędzie, moŝemy instrukcją warunkową badać numer błędu (Err.Number) i w zaleŝności od numeru błędu wyświetlać odpowiedni komunikat. Np. kod poniŝej oblicza silnię. Silnia liczby 13 przekracza wartość maksymalnej liczby mieszczącą się w zmiennej typu Integer. Sytuacja taka moŝe generować komunikaty zwracające uwagę uŝytkownikowi na rodzaj błędu - mówiący o niezgodności typów, rys. 8 lub przepełnieniu, rys. 9. Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim s As Integer = 1 Dim i, n As Integer n = CInt(TextBox1.Text) For i = 1 To n s = s * i Next TextBox3.Text = s.tostring If Err.Number = 13 Then 'Komunikat przy błędzie nr 13 (rys. 8) MsgBox("Niezgodność typów." & vbcrlf & _ "Proszę poprawić dane.", MsgBoxStyle.Information, _ "Błąd nr " & Err.Number) ElseIf Err.Number = 6 Then 'Komunikat przy błędzie nr 6, rys. 9 MsgBox("Przepełnienie." & vbcrlf & _ "Liczba jest zbyt duŝa.", MsgBoxStyle.Question, _ "Błąd nr " & Err.Number) Else 'Komunikat przy błędach o pozostałych numerach MsgBox("Proszę poprawić dane." & vbcrlf & _ Err.Description, MsgBoxStyle.Critical, _ "Błąd nr " & Err.Number) End End Sub Rysunek 8 Rysunek 9 Copyright 2014, mgr inŝ. Janusz Bonarowski 5

Samodzielne (programowe) generowanie błędów i ich obsługa Zadanie Obliczyć objętość walca V mając dane: promień podstawy R i wysokość H. Formularz niech ma postać jak na rys. 10. Rysunek 10 Rysunek 11 Gdy tworzymy tę aplikację moŝemy przewidzieć sytuację, gdy uŝytkownik wprowadzi błędne dane, np. wartości spoza zakresu (w zadaniu są to wartości mniejsze lub równe zero). MoŜemy teŝ obsłuŝyć ją programowo bez struktury... : R = CSng(txtR.Text) If R <= 0 Then MsgBox("Błąd danych: R <= 0", MsgBoxStyle.Critical, "Złe dane") Exit Sub W takiej sytuacji naleŝałoby teŝ warunkowo przerwać dalsze wykonywanie programu instrukcją Exit Sub. Efekt takiego rozwiązania pokazuje rys. 11. Podobnie naleŝałoby zabezpieczyć błędnie wprowadzone dane dla wysokości walca H. Wygodniejszym jednak sposobem jest posłuŝenie się strukturą..., a pojawienie się sytuacji, którą uwaŝamy za błędną, zasygnalizować metodą Err.Raise(). Argumenty metody: Err.Raise(Number, Source, Description) W metodzie tej sami definiujemy generującą własny numer błędu (parametr Number), własny komunikat o źródle błędu (parametr Source) i własny opis błędu (parametr Description). PoniewaŜ błędy czasu wykonania (Err.Number) z przedziału od 1 do 1000 zarezerwowane są dla środowiska Visual Basic programista powinien własne numery błędów określać spoza tego przedziału. Na potrzeby tego zadania określajmy numery błędów jako 4-ro cyfrowe, poczynając od 9000. Copyright 2014, mgr inŝ. Janusz Bonarowski 6

Kod Private Sub btnoblicz_click(byval sender As System.Object, _ ByVal e As System.EventArgs) Handles btnoblicz.click Dim R, H, V As Single R = CSng(txtR.Text) 'If R <= 0 Then ' MsgBox("Błąd danych: R <= 0", MsgBoxStyle.Critical, _ "Złe dane") ' Exit Sub ' If R <= 0 Then Err.Raise(9000, "Test promienia. ", "Promień R <= 0") 'Err.Raise(Number, Source, Description) H = CSng(txtH.Text) If H <= 0 Then Err.Raise(9001, "Test wysokości.", "Wysokość H <= 0") 'Err.Raise(Number, Source, Description) V = Math.PI * R ^ 2 * H txtv.text = V.ToString ex As Exception MsgBox(Err.Source & Err.Description, _ MsgBoxStyle.Exclamation, "Błąd nr " & _ Err.Number) 'MsgBox("ex.Message: " & ex.message, MsgBoxStyle.Information, _ "błąd nr " & Err.Number) End End Sub Posługiwanie się metodą Raise pozwala w strukturze umieścić tylko jedną instrukcję (np. pojedynczy Message Box) drukującą komunikaty o błędach i róŝnicować ją podczas własnego generowania błędu. W kodzie pokazano teŝ zakomentowane fragmenty kodu do innej obsługi błędów. Proszę odkomentować i zobaczyć róŝnicę w działaniu. Copyright 2014, mgr inŝ. Janusz Bonarowski 7

Programowe generowanie błędów i ich obsługa przy pracy z podprogramami Gdy tworzymy aplikację składającą się z podprogramów i/lub funkcji - moŝliwość samodzielnego (programowego) określania numeru błędu, jego źródła i opisu jest najwygodniejszym sposobem posłuŝenia się strukturą.... Tworzymy ją na jak najwyŝszym poziomie (tu w programie głównym), a pojawienie się błędu w procedurach lub funkcjach obsłuŝymy metodą Err.Raise(). Zadanie to samo Obliczyć objętość walca V mając dane promień podstawy R i wysokość H. Formularz niech ma zatem postać jak na rys. 10. Pole podstawy walca i jego objętość obliczymy posługując się oddzielnymi funkcjami, a błędy, które mogą powstać gdzieś głęboko w funkcjach obsłuŝymy w programie głównym strukturą... z pojedynczą instrukcją drukującą (róŝnorodne) komunikaty o błędach. Kod Private Sub btnoblicz_click(byval sender As _ System.Object, ByVal e As System.EventArgs) Handles btnoblicz.click Dim R, H, V As Single R = CSng(txtR.Text) H = CSng(txtH.Text) V = Objetosc(PolePodstawy(R), H) txtv.text = V.ToString MsgBox(Err.Source & " - błąd danych: " & Err.Description, _ MsgBoxStyle.Exclamation, "Błąd nr " & _ Err.Number) End End Sub Private Function PolePodstawy(ByRef R As Single) As Single If R <= 0 Then Err.Raise(9000, "Funkcja PolePodstawy", "Promień R <= 0") 'Err.Raise(Number, Source, Description) PolePodstawy = Math.PI * R ^ 2 End Function Private Function Objetosc(ByVal pole As Single, _ ByVal wysokosc As Single) As Single If wysokosc <= 0 Then Err.Raise(9001, "Funkcja Objetość", "Wysokość H <= 0") 'Err.Raise(Number, Source, Description) Objetosc = pole * wysokosc End Function Bibliografia [1] Microsoft Visual Basic.NET, Michael Halvorson, Wydawnictwo RM, Warszawa 2002. Copyright 2014, mgr inŝ. Janusz Bonarowski 8