VisualStudio.Net Janusz Górczyński.

Slides:



Advertisements
Podobne prezentacje
Katarzyna Szafrańska kl. II ti
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Wprowadzenie do C++ Zajęcia 2.
Języki programowania C++
Praca z plikami tekstowymi
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
CLR na platformie .NET Tomasz Kostarski.
OOP - programowanie zorientowane obiektowo w VB.NET
27/09/ Języki programowania 1 Piotr Górczyński Obsługa błędów.
Platforma .Net i Vs.Net.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Kurs Pascala – spis treści
Struktury.
Biblioteki i przestrzenie nazw
PODSTAWY JĘZYKA PHP 1. czym jest 2. składnia 3. wersje 4. bazy danych
Wykład 2 struktura programu elementy języka typy zmienne
1 Języki i techniki programowania prowadzący dr Grzegorz Filipczyk.
Java – programowanie obiektowe
Podstawy C# Grupa .NET PO.
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Instytut Tele- i Radiotechniczny WARSZAWA
Podstawy programowania
A ctive S erver P ages Technologia dostępu do danych.
Programowanie w języku Matlab
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Programowanie obiektowe – zastosowanie języka Java SE
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Maszyna wirtualna ang. virtual machine, VM.
Podstawy informatyki 2013/2014
Programowanie w języku C++
Podstawy programowania
VBA w MS Word Źródła: Steven Roman, Word.Makrodefinicje, Helion 2000
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Podstawy programowania (4)
Procesor, pamięć, przerwania, WE/WY, …
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Uprawnienia w Windows Server
Dokumentacja obsługi programów Kamil Smużyński Piotr Kościński.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Platforma .Net.
Podstawy programowania
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Pętle – instrukcje powtórzeń
Dokumentacja programu komputerowego i etapy tworzenia programów.
C++ WYKŁAD 12 ( ) Własne biblioteki. S PIS TREŚCI Kompilacja i łączenie Moduły Biblioteki Biblioteka statyczna Biblioteka współdzielona Biblioteka.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Visual Basic przygotował Michał Miłek Visual Basic – język programowania wysokiego poziomu i narzędzie programistyczne firmy Microsoft. Składnia jest oparta.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Zmienne typy danych w VBA. MS Excel – typy danych w języku programowania VBA.
Programowanie Obiektowe – Wykład 6
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Wątki, programowanie współbieżne
Programowanie Obiektowe – Wykład 2
Visual Basic for Applications
Visual Basic w programie Microsoft Excel
Podstawy programowania
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

VisualStudio.Net Janusz Górczyński

Agenda Składniki .Net .NET Framework – podstawowe składniki Zadania .NET Framework Architektura .NET Framework CLR Wspólne środowisko uruchomieniowe Biblioteka klas Języki programowania a CLS Czym jest MSIL?

Składniki .Net Produkty .Net – obecne i przyszłe produkty wchodzące w skład .Net. Najważniejszym (obecnie) elementem jest VisualStudio.Net Usługi .Net – to gotowe usługi oferowane przez MS, np. Passport .Net Framework – produkt całkowicie zintegrowany z systemem operacyjnym Windows. Pozwala na tworzenie szybkich, elastycznych, skalowalnych i efektywnych aplikacji. Pozwala na tworzenie aplikacji współpracujących z innymi aplikacjami .Net oraz komponentami napisanymi w innych językach.

.NET Framework – podstawowe składniki Biblioteka klas .NET Framework – zbiór funkcji, obiektów, właściwosci i metod do wykorzystania w dowolnym języku .Net. Jest tu także ADO.NET. Wspólne środowisko uruchomieniowe CLR (Common Language Runtime) – odpowiada za uruchamianie aplikacji .NET, zarządzanie nimi i kompilację do kodu maszynowego. WindowsForms (WinForms) – pozwala na tworzenie aplikacji dla Win32 w środowisku .NET ASP.NET – to kolejna generacja ASP dostosowana do pracy w środowisku .NET. Aplikacje ASP.NET są kompilowane, co znakomicie przyspiesza ich udostępnianie.

Zadania .NET Framework Zapewnienie spójnego środowiska programowania obiektowego Zapewnienie takiego środowiska wykonywania kodu, które: minimalizuje konflikty przy rozprowadzaniu kodu i jego wersjonowania gwarantuje bezpieczne wykonywanie kodu oraz kontrolę kodu utworzonego przez innych programistów Eliminuje problemy związane z wydajnością skryptów czy języków interpretowanych Zapewnienie spójnego środowiska przy pracy nad różnymi typami aplikacji Zabezpieczenie integracji .NET Framework z innymi produktami

Architektura .NET Framework

CLR Wspólne środowisko uruchomieniowe Podstawa .NET Framework – zarządza kodem w czasie jego działania Udostępnia takie usługi jak: Zarządzanie pamięcią Zarządzanie wątkami Wywołania zdalne Innym zadaniem jest ścisła kontrola typów Kod zarządzany – taki, który ma być wykonywany w tym środowisku Kod niezarządzany – taki, który nie jest przeznaczony do wykonania w tym środowisku

Biblioteka klas Jest integralną częścią .NET Framework, zawiera klasy lub typy przeznaczone do wielokrotnego użycia wykorzystywane do projektowania aplikacji różnych typów: Aplikacji wiersza poleceń Aplikacji z graficznym interfejsem użytkownika korzystających z: Windows Forms ASP.NET Web Forms Usług sieciowych XML

Języki programowania a CLS NET Framework obsługuje języki VB.NET, C++.NET, C#.NET i VJ#.NET Języki te są zgodne ze standardem Common Language System (CLS), który definiuje infrastrukturę niezbędną do uruchomienia kodu IL (Intermediate Language) Kompilatory wymienionych języków kompilują kod źródłowy do kodu pośredniego IL – co jest podstawą współpracy tych języków wsparte wspólnym systemem typów CST (Common System Type)

Czym jest MSIL? Jest to niezależny od procesora zbiór instrukcji wykorzystywanych przez aplikacje .NET Zawiera instrukcje ładowania, zapisywania i inicjalizacji obiektów

Metadane Podczas kompilacji poza kodem IL kompilator generuje metadane będące zbiorem informacji o aplikacji Metadane są zapisywane w postaci binarnej w przenośnym pliku wykonywalnym PE (Portable Executable) Przy wykonywaniu aplikacji system operacyjny ładuje plik PE oraz wszystkie biblioteki podrzędne ładowane dynamicznie W kolejnym kroku system operacyjnych wykonuje kod IL korzystając z pośrednictwa kompilatora JIT

Kompilator JIT Kompilator JIT (Just in time) odpowiada za biężące tłumaczenie kodu IL na kod maszynowy zrozumiały przez procesor Kod maszynowy po wykonaniu jest buforowany w celu ponownego wykonania

Składniki CLR

Zadania CLR (1) Moduł ładowania klas – odpowiada za ładowanie klas do wspólnego środowiska uruchomieniowego Kompilatory MSIL – odpowiadają za konwersję kodu IL do kodu maszynowego (robi to JIT) Zarządzanie kodem – zarządza kodem w trakcie jego wykonywania Usuwanie nieużytków – odpowiada za zarządzanie pamięcią (automatyczne zwalnianie pamięci) Moduł bezpieczeństwa – wymusza ograniczenia nakładane przez zabezpieczenia dostępu do kodu Kontroler typów – zapewnia ścisłą kontrolę typów

Zadania CLR (2) Obsługa wątów – zapewnia obsługę wielowątkowości Obsługa wyjątków – zapewnia obsługę wyjątków za pomocą bloków Try … Catch…Finally Moduł debugowania – zapewnia debugowanie różnych typów aplikacji Moduł szeregujący COM – pozwala na wymianę danych z aplikacjami COM Obsługa podstawowej biblioteki klas – udostępnia aplikacji potrzebne klasy (typy)

Biblioteka klas .NET Framework Jest zbiorem klas i związanych z nimi struktur, które mogą być wykorzystane jako podstawowe elementy budulcowe aplikacji Biblioteka .NET Framework zawiera klasy, interfejsy i typy wartości, które nie tylko zapewniają dostęp do mechanizów systemu, ale także optymalizują proces tworzenia aplikacji Typy zgromadzone w .NET Framework pozwalają na: Reprezentację podstawowych typów danych i wyjątków Hermetyzację struktur danych Wykonywanie operacji wejścia-wyjścia Dostęp do informacji o załadowanych typach Wywoływanie mechanizmów zabezpieczeń z .NET Zapewnienie dostępu do danych poprzez GUI

Organizacja klas w bibliotece .NET Framework Podstawową jednostką organizacyjną jest przestrzeń nazw Przestrzeń klas to pojemnik na funkcje – opisuje ona grupę klas i konstrukcji o podobnym przeznaczeniu Koncepcja przestrzeni nazw jest podobna do koncepcji organizacji plików za pomocą katalogów (folderów) Wszystkie przestrzenie nazw mają wspólny korzeń, jest nim przestrzeń System Przestrzeń nazw System zawiera wspólne typy danych wykorzystywanych w .NET (Boolean, Int32 itd.) Zawiera także typ danych Object, który jest klasą, po której dziedziczą wszystkie pozostałe klasy w .NET

Podzespół w .NET Podstawowa jednostka w aplikacjach .NET, wprowadzona jako remedium na problemy z DLL Podzespół reprezentuje logiczny zbiór jednego lub większej liczby programów wykonywalnych lub bibliotek dołączanych dynamicznie (DLL), które zawierają kod aplikacji oraz zasoby Podzespoły zawierają tzw. manifest, który jest opisem kodu i zasobów zawartych wewnątrz podzespołu Podzespół zawiera: Manifest Metadane typów Moduł Zasoby

Manifest, jego zawartość Identyfikator – składa się z nazwy, numeru wersji, opcjonalnego kodu lokalizacji i podpisu cyfrowego Lista plików – kompletna lista plików tworzących podzespół. Zawiera także dodatkowe informacje na temat każdego z plików wchodzących w skład podzespołu Typy i zasoby – jest to lista typów i zasobów udostępnianych przez podzespół. Zawiera informację o tym, czy dany typ jest publiczny czy prywatny Uprawnienia – podzespoły są modułami, w których wykorzystywane są uprawnienia dostępu dla kodu

Podstawy języka VB.NET Deklarowanie zmiennych – słowa kluczowe: Dim – deklaruje zmienną wykorzystywaną w podprogramie lub w jego części Private – deklaruje zmienną, która może być wykorzystywana przez więcej niż jeden podprogram w klasie lub module Public – deklaruje zmienną, która może być wykorzystywana we wszystkich klasach i modułach projektu Static – deklaracja zmiennej w podprogramie, która zachowuje swoją wartość między wywołaniami Przykłady: Dim errHandler as String Dim ocena as Single = 3 Private i, j as Integer, x as Double

Zmienne, poziom deklaracji Zmienna lokalna – deklarowana wewnątrz podprogramu Zmienna modułu – deklarowana w module, ale nie w podprogramie W przypadku klasy lub struktury (typu użytkownika) poziom zmiennej nielokalnej zależy od tego, czy jest współdzielona czy też nie. Jeżeli jest współdzielona, to ze słowem kluczowym Shared. Istnieje wtedy tylko jedna kopia tej zmiennej we wszystkich instancjach takiej klasy. Jeżeli nie jest współdzielona, to każda instancja ma swoją kopię takiej zmiennej

Zmienne, deklaracja typu Klauzula As pozwala na zdefiniowanie typu danych lub typu obiektowego deklarowanej zmiennej Dla zmiennej można określić dowolny z poniższych typów: Podstawowy typ danych – np. Boolean, Long czy Decimal Złożony typ danych, taki jak tablica lub struktura (typ użytkownika) Typ obiektowy Klasa z VB.NET lub innej aplikacji, np. ComboBox Wybór typu danych wymaga staranności, nie może być nadmiarowy

Zmienne, czas życia i dostępność Czas życia to czas, w którym można ze zmiennej korzystać Zmienne lokalne (deklarowane za pomocą DIM) istnieją tylko w czasie wykonywania podprogramu, a po jego zakończeniu zniakają, a ich wartości są tracone – wyjątek to użycie Static Zmienne modułu, współdzielone i instancyjne, przechowują swoje wartości tak długo, jak długo działa aplikacja Dostępność zmiennej zależna jest od sposobu deklaracji: Dim, Private, Public, Protected, Friend, Protected Friend Wewnątrz podprogramu można użyć tylko Dim

Zmienne, deklaracja zasięgu Zasięg zmiennej to obszar kodu, w którym można się odwołać do zmiennej bez potrzeby użycia nazwy kwalifikowanej Zasięg zmiennej jest określony przez miejsce jej deklaracji Zmienne lokalne są najlepsze dla pomocniczych działań (z uwagi na szybkie zwalnianie pamięci) Zmienne modułu zajmują miejsce w pamięci przez czas działania aplikacji Przy deklarowaniu zasięgu ważne są reguły: Zasięgiem zmiennej modułu jest przestrzeń nazw, w której zdefiniowany jest dany moduł Zasięgiem zmiennej współdzielonej lub instancyjnej jest struktura lub klasa, w której zmienna jest zadeklarowana Zasięgiem zmiennej lokalnej jest podprogram

Użycie przestrzeni nazw Niezbędne z uwagi na dużą liczbę klas .NET Dzięki umieszczeniu klas w przestrzeni nazw unika się kolizji nazw (działa to tak, jak w systemie plików może istnieć wiele plików o nazwie np. aza.txt , pod warunkiem, że są umieszczone w innych folderach) Jeżeli tworzymy nowy projekt o nazwie np. Nowy, to można umieścić go w przestrzeni nazw: Namespace Nowy Public Class Form1 Inherits System.Windows.Forms.Form ……. Tu jest kod …. End Class End NameSpace

Słowo kluczowe Imports W poprzednim przykładzie prawdziwa nazwa klasy nie jest Form1, lecz Nowy.Form1 (nazwa w pełni kwalifikowana) W przypadku odwoływania się do tej klasy poza przestrzenią nazw Nowy musimy użyć nazwy w pełni kwalifikowanej, chyba, że skorzystamy ze słowa kluczowego Imports w celu zaimportowania przestrzeni nazw Nowy Zapis Imports System.Windows.Forms powoduje, że w kodzie można się odwoływać w sposób uproszczony – bez używania nazwy kwalifikowanej

Tworzenie modułów w VB.NET Moduł jest podobny do klasy, a różnica polega na tym, że składniki modułu są współdzielone i tym samym są widoczne w całej przestrzeni nazw, w której jest zadeklarowany moduł, a nie tylko w samym module Moduł może być deklarowany tylko w przestrzeni nazw i nie może być zagnieżdżony Moduł w VB.NET to znany z VB 6.0 czy VBA moduł standardowy zawierający zestaw funkcji i procedur dostępnych dla aplikacji Klasa w VB.NET to znany z VB 60 czy VBA moduł klasy Klasa jest zorientowana obiektowo, a moduł nie

Struktury sterujące, pętle W VB.NET można stosować pętle typu” While DoWhile…Loop Do….LoopWhile DoUntil….Lopp Do ….Loop Until For…Next ForEach…Next

Pętla While Pętla While wykonywana jest do momentu, gdy warunek nie stanie się prawdą Dim produkt As Integer = 2 While produkt <=1000 produkt = produkt * 2 End While

Pętla DoWhile…Loop Pętla ta działa podobnie do pętle While W pętli DoWhile ….Loop warunek jest sprawdzany przed wykonaniu obrotu, co oznacza, że pętla może nie być wykonana (jeżeli warunek jest False) Dim produkt As Integer = 2 Do While produkt <=1000 produkt = produkt * 2 Loop

Pętla Do ….LoopWhile W pętli Do ….LoopWhile warunek jest sprawdzany po wykonaniu obrotu, co oznacza, że pętla będzie wykonana co najmniej raz. Dim produkt As Integer = 2 Do produkt = produkt * 2 Loop While produkt <=1000

Pętla DoUntil … Loop Inaczej niż w pętlach DoWhile pętla DoUntil wykonywana jest wtedy, gdy warunek jest False Z uwagi na umieszczenie słowa Until wraz z warunkiem po Do pętla może nie być wykonana Dim produkt As Integer = 2 Do Until produkt >1000 produkt = produkt * 2 Loop

Do …LoopUntil Inaczej niż w pętlach DoWhile pętla DoUntil wykonywana jest wtedy, gdy warunek jest False Z uwagi na umieszczenie słowa Until wraz z warunkiem po Loop pętla będzie wykonana co najmniej raz Dim produkt As Integer = 2 Do produkt = produkt * 2 Loop Until produkt >1000

Pętla For … Next Inaczej zwana pętlą z licznikiem. Stosowana wtedy, gdy wiemy, ile razy ma być wykonana Dim i As Integer, x as Double = 0 For i=1 to 100 x=x+i Next For i=1 to 100 Step 2 x=x*i Next i

Pętla ForEach … Next Ten typ pętli wykorzystujemy wtedy, gdy chcemy wykonać operacje na elementach kolekcji Powiedzmy, że na naszym formularzu chcemy zmienić kolor tła wszystkich formantów na jasnoniebieski Imports System.Windows.Forms Dim ctl As Control For Each ctl in currentForm.Controls ctl.BackColor=System.Drawing.Color.LightBlue Next

Warunkowe zakończenie pętli - Exit Każda pętla może być warunkowo przerwana za pomocą słowa kluczowego Exit Dim i As Integer, x as Double = 0 For i=1 to 100 x=x+i if x>25 Then Exit for Next Exit może być także użyte do przerwania działania także innych struktur niż pętle, np. Select Case

Operatory przypisania Zapis i=i+1 jest opisaniem przypisania: zmienna i będzie równa poprzedniej wartości zmiennej i powiększonej o 1 Operatory dwuargumentowe to +, -, *, ^, &, \ oraz / Można użyć skróconego zapisu wg schematu: <zmienna> <operator>=<wyrażenie> Np.. i+=1 jest równoważne i=i+1 x\=2 jest równoważne x=x\2 y*=x jest równoważne y=y*x Operator przypisania może wystąpić w wyrażeniu tylko raz

Operatory logiczne VB.NET oferuje kilka interesujących operatorów logicznych dla budowania złożonych warunków Poza znanymi operatorami And, Or, Xor oraz Not mamy takie operatory jak AndAlso i OrElse Zapis np.. If (i>5) and (j>10) Then można teraz zapisać jako If (i>5) AndAlso (j>10) Then W pierwszym zapisie sprawdzane są oba warunki pojedyncze, a następnie warunek łączny – w drugim jeżeli pierwszy jest False, to drugi nie jest już sprawdzany

Funkcje konwertujące Szereg funkcji konwertujących zmienną jednego typu na inny typ. Cbool – konwersja na typ logiczny Cbyte Cchar Cdate Cdbl Cint Clng Cstr Ctype – konwertuje na dowolny typ

Przydatne funkcje tekstowe Len Chr Asc Left Right Mid Instr Lcase Ucase Ltrim, Rtrim, Trim Substring

Inne przydatne funkcje IsArray – zwraca True jeżeli tak IsDate – zwraca True, jeżeli parametr jest datą IsNumeric – zwraca True, jeżeli parametr jest liczbą IsObject – zwraca True, jeżeli parametr jest typem obiektowym TypeName – zwraca nazwę typu danych parametru Now – zwraca bieżącą datę i czas Today – zwraca bieżącą datę z czasem ustawionym na 00:00:00

Try…Catch W trakcie wyknywania programu mogą się zdarzyć różne błędy, np. brak wskazanego pliku w danej lokalizacji, wyłączona drukarka, brak papieru, brak krążka w napędzie CD, brak dostępu do sieci czy do serwera SQL, brak pamięci czy brak stosownych uprawnień. Obowiązkiem programisty jest zapewnienie obsługi takich sytuacji (wyjątków). Środowisko VisualStudio.NET dostarcza konstrukcję Try …Catch …End Try tworząca pułapkę na możliwy wyjątek. Jest to znakomite rozszerzenie znanaych z VBA isntrukcji On Error Goto i On Error Resume Next

Składnia Try Catch [Finally] End Try … tu wstawiamy kod, który może spowodować błąd wykonania … Catch … tu wstawiamy kod obsługujący wystąpienie wyjątku … [Finally] … fragment nieobowiązkowy, jeżeli jest, to jest wykonywany zawsze niezależnie od tego, czy wystąpił wyjątek czy nie End Try Przy obsłudze błędu można wykorzystać obiekt err z jego właściwościami Number i Description do doprecyzowania rodzaju błędu

Przykład Try FileOpen(1, Me.OpenFileDialog1.FileName, _ OpenMode.Input) Do Until EOF(1) txt = txt + LineInput(1) + vbCrLf Loop Catch MsgBox("Mam problem z odczytem pliku") Finally FileClose(1) Me.txtPlik.Text = txt Me.Text = txtNazwaPliku + " metoda FileOpen" End Try

Przykład obsługi błędu z licznikiem Dim ileErr as Integer = 0 Try PictureBox1.Image = _ System.Drawing.Bitmap.FromFile(„D:\wszim.bmp”) Catch ileErr += 1 If ileErr <= 2 then MsgBox(„Proszę włożyć dysk do napędu") Else MsgBox(„Operacja odczytu pliku graficznego nieudana”) Exit Sub (lub jakieś inne zakończenie – JG) End If End Try

Zagnieżdzone Try…Catch PictureBox1.Image = _ System.Drawing.Bitmap.FromFile(„D:\wszim.bmp”) Catch MsgBox(„Proszę włożyć dysk do napędu i nacisnąć OK") MsgBox(„Operacja odczytu pliku graficznego nieudana”) Exit Sub (lub jakieś inne zakończenie – JG) End Try

Wykorzystanie obiektu Err Try PictureBox1.Image = _ System.Drawing.Bitmap.FromFile(„D:\wszim.bmp”) Catch When Err.Number = 53 MsgBox(„Plik nie odnaleziony”) Catch When Err.Number = 7 MsgBox(„Brak pamięci”) Catch MsgBox(„Operacja odczytu pliku graficznego nieudana”) End Try

Jak było bez Try…Catch If File.Exists(„D:\WSZiM.bmp”) Then Else End if PictureBox1.Image = _ System.Drawing.Bitmap.FromFile(„D:\wszim.bmp”) Else MsgBox(„Plik nie odnaleziony”) End if Taka konstrukcja wymaga zaimportowania przestrzeni nazw System.IO, jest oczywiścia dopuszczalna, ale Try…Catch działa szybciej