vb6 -> vb.net 2008

111
VB6 -> VB.NET 2008 Mgr. Michal Neuwirth ISV Teachnical Readiness

Upload: aimon

Post on 15-Jan-2016

110 views

Category:

Documents


3 download

DESCRIPTION

VB6 -> VB.NET 2008. Mgr. Michal Neuwirth ISV Teachnical Readin e s s. Obsah. .NET Framework VB6 vs VB.NET 200 8 OOP API, COM, COM+ Windows Forms Přístup k datům Migration wizard. Co .NET přináší. Windows aplikace, Webové aplikace Windows a Web služby Konzolové aplikace - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: VB6 ->  VB.NET 2008

VB6 -> VB.NET 2008

Mgr. Michal NeuwirthISV Teachnical Readiness

Page 2: VB6 ->  VB.NET 2008

Obsah

.NET Framework VB6 vs VB.NET 2008 OOP API, COM, COM+ Windows Forms Přístup k datům Migration wizard

Page 3: VB6 ->  VB.NET 2008

Co .NET přináší

Windows aplikace, Webové aplikace Windows a Web služby Konzolové aplikace Aplikace pro mobilní zařízení Aplikace pro TabletPC Vývoj pro Servery – SQL, Biztalk, MOSS

2007, .... Používání XML Rychlý vývoj aplikací pomocí Visual Studia

Page 4: VB6 ->  VB.NET 2008

VB 6.0 aplikační prostředíA

ctiveX D

esignersC

OM

Objects

Operating System COM+ Services

Win3

2 A

PI C

alls

COM

DirectX Typelib

ADOActiveX Controls

Data Binding

VB Runtime

Runtime Functions

Forms

Memory Management

Intrinsic Objects

User Controls

ActiveX Documents

Web C

lasses

Data R

eport

Data E

nvironment

VB Application

Page 5: VB6 ->  VB.NET 2008

Přechod z VB6 na .NETA

ctiveX D

esignersC

OM

Objects

Operating System COM+ Services

Win3

2 A

PI C

alls

COM

DirectX Typelib

ADOActiveX Controls

Data Binding

VB Runtime

Runtime Functions

Forms

Memory Management

Intrinsic Objects

User Controls

ActiveX Documents

Web C

lasses

Data R

eport

Data E

nvironment

VB Application

Page 6: VB6 ->  VB.NET 2008

Přechod z VB6 na .NET

Operating System COM+ Services

Win3

2 A

PI C

alls

Common Language Runtime

ActiveX

Designers

CO

M O

bjects

DirectX Typelib

ADOActiveX Controls

Data Binding

VB Runtime

Runtime Functions

Forms

Memory Management

Intrinsic Objects

User Controls

ActiveX Documents

Web C

lasses

Data R

eport

Data E

nvironment

VB Application

Page 7: VB6 ->  VB.NET 2008

Common Language Specification

Přechod z VB6 na .NET

Operating System COM+ Services

Win3

2 A

PI C

alls

Common Language Runtime

ADO .NET and XML

ASP.NETWeb Forms, Services

Base Class Libraries

Windows Forms

VB Application

Page 8: VB6 ->  VB.NET 2008

Přechod z VB6 na .NET

Common Language Specification

Operating System COM+ Services

Win3

2 A

PI C

alls

Common Language Runtime

ADO .NET and XML

ASP.NETWeb Forms, Services

Base Class Libraries

Windows Forms

VB ApplicationVB C# C++ J# Perl Other Languages…

Visual S

tudio.NE

T

Page 9: VB6 ->  VB.NET 2008

Common Language Specification

.NET Framework a Runtime

Operating System COM+ Services

Win3

2 A

PI C

alls

Common Language Runtime

ADO .NET and XML

ASP.NETWeb Forms, Services

Base Class Libraries

Windows Forms

VB C# C++ J# Perl Other Languages…

Visual S

tudio.NE

T

Page 10: VB6 ->  VB.NET 2008

.NET Framework

Garbage Collector Automatický systém na čištění paměti Uvolňuje z paměti nepotřebné objekty, ne hned, ale

v rámci garbage collection Nastavení objektu na Nothing objekt nezničí, pouze

připraví ke zničení Assembly

Samopopisný soubor Obsahuje metadata, výkonný kód, ....

Side by Side Více verzí může běžet vedle sebe Konfiguračním souborem lze nastavit jaké verze

používat

Page 11: VB6 ->  VB.NET 2008

.NET Framework

Součástí .NET Frameworku Microsoft.VisualBasic.DLL

Global Assembly Cache Místo kam se „instalují“ sdílené assembly

Instalace XCopy .MSI Click-Once

Cross-language a cross-platform ladění

Page 12: VB6 ->  VB.NET 2008

Kompilace a běh aplikace

Zdrojový kód

Kompilace

Při instalaci nebo při prvním zavolání každé

metody

Kompilátor jazyka Assembly

Vykonání

JIT CompilerNativníKód

Code (IL)

Metadata

Page 13: VB6 ->  VB.NET 2008

Restart

Klient PC

MDAC!

Click-Once instalace

Setup.exe

Dotnetfx.exe

Web Server

Mdac_typ.exe

Custom.msi

AplikaceAplikace

Dotnetfx.exe

Custom.msi

Setup.exe

a

a

Page 14: VB6 ->  VB.NET 2008

Visual Studio

Page 15: VB6 ->  VB.NET 2008

VB6 VS VB.NET 2008

Page 16: VB6 ->  VB.NET 2008

Typy aplikací

Architektura VB6 projekt VB 2008 Projekt

Desktop aplikace Standard .exe aplikace Windows aplikace (Winforms)

Web aplikace IIS aplikace ASP.NET aplikace (WebForms)

Distribuované aplikace Aplikace využívající DCOM, MTS a COM+

Aplikace využívající Webové služby, .NET remoting, Enterprise Services nebo Windows Communication Foundation

Page 17: VB6 ->  VB.NET 2008

Typy projektů

Komponenta VB6 typ VB 2008 typ

Out of process knihovna ActiveX.exe Není. Upgrade na Windows aplikaci či Class library.

In-process knihovna ActiveX.dll Class library

Visuelní komponenta ActiveX.ocx Windows control library

Visuelní komponenta určená pro hostování v internetových aplikacích

ActiveX document Není. Použít UserControls pro ASP.NET.

Page 18: VB6 ->  VB.NET 2008

Datové typy

VB 2008 je silně typový jazyk, každá proměnná zná svůj typ v době překladu a musí bý inicializovaná hodnotou Variant není k dispozici

Fixní délka řetězců není k dispozici Dim name As String * 15

Page 19: VB6 ->  VB.NET 2008

Pole

Option Base x Ve VB6 určuje počáteční index polí .NET má všechny pole od 0 -> Option Base není

podporováno Dim MojePole (5) = obsahuje 6 položek (0-5)

Page 20: VB6 ->  VB.NET 2008

Late binding

Některé defaultní vlastnosti se liší ve VB6 a VB.NET'VB6Dim o As ObjectSet o = Me.Label1o = "SomeText" 'default je Caption 'VB.NETDim o As ObjectSet o = Me.Label1o.Text = "SomeText"

Page 21: VB6 ->  VB.NET 2008

Cykly

While ... Wend While ... End While

Page 22: VB6 ->  VB.NET 2008

Parametry funkcí

ByRef – default VB6 ByVal – default VB 2008

Optional - musí mít nastavenu výchozí hodnotuPublic Sub TestSub(Optional ByRef p1 As String = "")End Sub

Page 23: VB6 ->  VB.NET 2008

Metody

ParamArray pole objektů předem neznámého počtu pouze jako poslední parametr musí být explicitně uvedeno ByVal pouze jedno-dimenzionální pole všechny prvky mají stejný typ

Sub StudentScores(ByVal Name As String, ParamArray ByVal Scores() As Integer) ……End Sub

StudentScores("Jamie", 10, 26, 32, 15, 22, 24, 16)

Page 24: VB6 ->  VB.NET 2008

Enum

Public Enum MyEnum FirstValue SecondValue ThirdValueEnd EnumPublic Sub TestEnum() Dim e As MyEnum e = SecondValueEnd Sub

MyEnum.SecondValue

Page 25: VB6 ->  VB.NET 2008

Structure

Private Type MyType x As Integer y As Integer name As StringEnd TypePublic Sub TestUDT() Dim udt As MyType udt.name = "Joe" udt.x = 5 udt.y = 10End Sub

Private Structure MyType Dim x As Short Dim y As Short Dim name As StringEnd Structure

Page 26: VB6 ->  VB.NET 2008

Vlastnosti

Private mText As StringPrivate mObj As Object'TextPublic Property Get Text() As String Text = mTextEnd PropertyPublic Property Let Text(ByVal Value As String) mText = ValueEnd Property'ObjectPublic Property Get Obj() As Object Obj = mObjEnd PropertyPublic Property Set Obj(ByVal Value As Object) Set mObj = ValueEnd Property

Page 27: VB6 ->  VB.NET 2008

Private mText As StringPrivate mObj As ObjectPublic Property Text() As String Get Return mText End Get Set(ByVal Value As String) mText = Value End SetEnd PropertyPublic Property Obj() As Object Get Obj = mObj End Get Set(ByVal Value As Object) mObj = Value End SetEnd Property

Page 28: VB6 ->  VB.NET 2008

Vlastnosti

ReadOnly obsahuje pouze blok Get

WriteOnly obsahuje pouze blok Set

Set blok obsahuje implicitní parametr Value

Public ReadOnly Property Obj() As Object Get Obj = mObj End GetEnd PropertyPublic WriteOnly Property TextW() As String Set(ByVal Value As String) mText_w = Value End SetEnd Property

Page 29: VB6 ->  VB.NET 2008

Try '<code that may fail> Catch ex As Exception '<error handling code>

Finally '<clean up>End Try

fReRaise = False

OnError GoTo ErrHandler '<code that may fail> GoTo CleanUp

ErrHandler: If '<condition we can handle> Then '<error handling code> Else fReRaise = True End If

CleanUp: If fReRaise Then Err.Raise errNum

On Error vs Try/Catch/Finally

OnError GoTo ErrHandler '<code that may fail>

ErrHandler: If '<condition we can handle> Then '<error handling code>

fReRaise = FalseTry '<code that may fail>

Else fReRaise = True End IfCleanUp: If fReRaise Then Err.Raise errNum

Catch ex As Exception '<error handling code>Finally '<clean up>

Page 30: VB6 ->  VB.NET 2008

Globální objekty

VB6 VB2008

App N/A. Informace jsou uloženy ve více třídách např. AssemblyInfo, My, ...

Screen N/A. K dispozici ve více třídách Forms, Drawing, ...

Printer PrintDocument

Clipboard Clipboard

Page 31: VB6 ->  VB.NET 2008

Další vlastnostiVB6 VB2008

Array { }

As Any Musí být uveden datový typ

Calendar Součást System.Globalization

Currency Decimal

Date Zůstává jako datový typ. Pro aktuální čas Today()

Debug.Assert, Debug.Print System.Diagnostics

Def<typ> N/A – každá proměnná musí být deklarována

DoEvents System.Windows.Forms.Application.DoEvents()

Empty, Null Nothing

IsEmpty, IsNull N/A – k dispozici IsDBNull

a IMP b (NOT a) OR b

GoSub N/A

IsMissing N/A – všechny parametry musí mít výchozí hodnotu

IsObject IsReference

Let, Set N/A

PSet, Scale System.Drawing (GDI+)

Page 32: VB6 ->  VB.NET 2008

Struktury souborů

VB6 .frm, .frx, .cls, .ctl., .bas, .res, .....

VB.NET .vb, .resx

Page 33: VB6 ->  VB.NET 2008

OOP

Page 34: VB6 ->  VB.NET 2008

Namespaces

Logické hierarchické třídění tříd System.Windows.Forms

Zajišťuje jednoznačnost jmen System.Windows.Forms Neuwirth.Forms

Jmenný prostor může být rozložen do více souborů

Imports „zkracuje“ syntaktický zápis

Dim frmForm1 As New System.Windows.Forms.Form Imports System.Windows.FormsDim frmForm2 As New Form

Page 35: VB6 ->  VB.NET 2008

Objektové programování

VB6 částečně objektový Nebyla podpora dědičnosti, pouze implementace

interface Nebyla podpora konstruktorů a destruktorů

VB 2008 Vychází z konceptu .NET frameworku, kde je vše

založeno na objektech Plně objektový jazyk se vším všudy Chybí jenom vícenásobná dědičnost

Page 36: VB6 ->  VB.NET 2008

Třída (objekt) automobil

Vlastnosti:- Barva- Výkon- Motor- Převodovka- Počet dveří- .........

Metody (operace):- Nastartuj- Zastav- Rozsvit svetla- Zhasni- Otevri dvere- .........

Stav:- Jede- Sviti- Bourane- Kradene- .........

KonstruktorVytvoření nového

automobilu

DestruktorSešrotování

Události:- Zastavil jsem- Rozsvítil jsem- Zhasnul jsem- Otevřel jsem

dveře- .........

Výjimky:- Prasklo kolo- Natural v

diesel motoru- .........

Page 37: VB6 ->  VB.NET 2008
Page 38: VB6 ->  VB.NET 2008

Základní pojmy

Encapsulation (zapouzdření) třída je zapouzdřená jednotka obsahující kód a data zakrytím detailů implementace, lze měnit kód uvnitř

metod, bez ovlivnění klientů využívajících tyto metody

K datům přistupovat zásadně pomocí metod nebo je definovat jako vlastnosti! Nikdy napřímo!

Page 39: VB6 ->  VB.NET 2008

Základní pojmy

Inheritance (dědičnost) vytvoření třídy na základě již existující VB.NET umožňuje pouze dědičnost z jedné třídy základní třída je rodič, odvozená je potomek vícenásobná dědičnost za použití interface

Polymorphism (polymorfizmus) dvě či více tříd definují vlastnost či metodu stejného

jména Metoda Nastup rodiče a potomka může mít odlišné

chování zajištěno přepisováním metod a vlastností

Page 40: VB6 ->  VB.NET 2008

Základní pojmy

Deklarace třídy popis třídy a jejích členů (vlastnosti, metody, ….)

Instance třídy deklarace proměnné určitého typu třídy

Public Class Car Private m_color As String Public Sub New() m_color = "White" End SubEnd Class

Public myCar As New Car()

Page 41: VB6 ->  VB.NET 2008

Tvorba instance

neexistuje SET AS NEW ve VB6 vytvoří objekt inicializovaný na

Nothing a až při prvním použití třídy je třída vytvořena

AS NEW v .NET rovnou vytvoří instanci toto je stejné

Dim Emp As New EmpObjDim Emp As EmpObj = New EmpObj

Page 42: VB6 ->  VB.NET 2008

Modifikátory přístupu

Public neomezený přístup (default)

Private Protected

přístup z potomků Friend

přístup pouze v rámci souboru, kde je třída deklarovaná

Protected Friend

Page 43: VB6 ->  VB.NET 2008

Dědičnost

Osobní automobil je potomek obecného automobilu

Public Class PKW Inherits Car  Private m_tz As Boolean Public Sub New() m_tz = False End SubEnd Class

Page 44: VB6 ->  VB.NET 2008

MyBase, MyClass

MyBase slouží k odkazu na deklaraci rodiče dané třídy lze přistoupit k public a protected členům

MyClass slouží k odkazu na deklaraci dané třídy

Page 45: VB6 ->  VB.NET 2008

Prvky tříd

Konstanty Private Const MyInt As Integer = 5

Proměnné Události Metody Vlastnosti Indexer Konstruktory a destruktory Operátory

Page 46: VB6 ->  VB.NET 2008

Shared members

Vlastnosti, metody a proměnné, které jsou společné (sdílené) pro všechny instance dané třídy „globální“ proměnná v rámci třídy

Inicializují se při natažení třídy do paměti Patří třídě a nikoliv instanci Shared metoda nemůže používat non-shared prvky

nelze použít Me ani MyClass

Private Shared kola as IntegerPublic Shared Sub NastavKola() kola = 5End Sub

PKW.NastavKola()

Page 47: VB6 ->  VB.NET 2008

Shared members

Shared metoda nemůže používat non-shared prvky nelze použít Me ani MyClass

Page 48: VB6 ->  VB.NET 2008

Instance members

Vše co nemá modifikátor Shared Každá instance obsahuje vlastní, separátní

kopii proměnných Me

ekvivalent this z C/C++/C# aktuální instance dané třídy lze použít s IS a též přiřadit proměnné

Page 49: VB6 ->  VB.NET 2008

Konstruktor

Nahrazuje událost Class_Initialize z VB6 Má jméno New() Třídy lze poté volat s New()

Dim FirstClass as New MyClass() Lze volat konstruktor rodičovské třídy (pouze v

instance konstruktoru) MyBase.New()

Lze volat konstruktor z jiného instance konstruktoru dané třídy MyClass.New(0)

Instance konstruktor musí explicitně jako první příkaz zavolat jiný konstruktor MyClass.New(), MyBase.New()

Page 50: VB6 ->  VB.NET 2008

Konstruktor

Parametrizovaný konstruktor

Public Class Car Private m_sedadla As Integer Public Sub New(ByVal i As Integer) MyBase.New() m_sedadla = i End SubEnd Class

Page 51: VB6 ->  VB.NET 2008

Konstruktor

Může být více konstruktorů u konstruktorů se pro přetížení nepoužívá Overloads

Public Class Car Private m_sedadla As Integer Public Sub New() MyClass.New(5) End Sub Public Sub New(ByVal i As Integer) MyBase.New() m_sedadla = i End SubEnd Class

Page 52: VB6 ->  VB.NET 2008

Konstruktor

Pokud není žádný definován je automaticky vytvořeno MyBase.New()

Page 53: VB6 ->  VB.NET 2008

Shared konstruktor

Slouží k inicializaci shared dat Shared Sub New()

……End Sub

je public, neobsahuje parametry a nemůže volat jiné konstruktory

je automaticky vyvolán při natažení třídy do paměti je vyvolán pouze jednou a je vyvolán před Shared

konstruktory potomků

Page 54: VB6 ->  VB.NET 2008

Destruktor

Obsahuje operace nutné pro „úklid“ Metoda Finalize () Nahrazuje událost Class_Terminate z VB6 Nelze volat explicitně a volá se při destrukci

objektu volá GC

Přiřazení Nothing neprovede přímé zrušení objektu, ale GC objekt smaže při příští Garbage Collection

Page 55: VB6 ->  VB.NET 2008

Dispose

Dispose() Pokud je potřeba smazat prostředky, které používá

třída metoda lze volat přímo a je též volána z Finalize ()

Lze přetížit i Finalize musí obsahovat MyBase.Finalize() je protected

Page 56: VB6 ->  VB.NET 2008

Overriding

Základ polymorfismu Umožňuje přepsat implementaci metody či

vlastnosti v potomkovi Modifikátory

Overridable – tato metoda může být přepsána (používá se u základní třídy)

Overrides – tato metoda přepisuje rodičovskou metodu

Page 57: VB6 ->  VB.NET 2008

Overriding

Public Class Car Public Overridable Function Popis() As String 'Zakladni popis automobilu End FunctionEnd ClassPublic Class PKW Inherits Car Public Overrides Function Popis() As String 'Popis bude obsahovat informace o cestujicich … End FunctionEnd Class

Page 58: VB6 ->  VB.NET 2008

Polymorfismus

MustOverride tato metoda musí být přepsána

NotOverridable tato metoda nemůže být přepsána

Page 59: VB6 ->  VB.NET 2008

Modifikátory přístupu třídy

MustInherit nelze vytvořit instanci třídy jedná se o „abstraktní“ třídu prvky by měly být MustOverride

NotInheritable z této třídy nelze dědit

Page 60: VB6 ->  VB.NET 2008

Přetěžování

Lze mít více metod, vlastností, konstruktorů atd. se stejným jménem pouze s jinou signaturou

všechny přetížené prvky musí obsahovat modifikátor Overloads

Public Class Car Public Overloads Function Popis() As String End Function

Public Overloads Function Popis(ByVal typ As Integer) As String End Function

Public Overloads Function Popis() As Integer End FunctionEnd Class

Page 61: VB6 ->  VB.NET 2008

Delegates

managed type-safe ukazatel na funkci delegate je založen na signatuře funkce Použitím metody Invoke vyvoláme metodu

uloženou v objektu delegate

Public Function MyFunction(ByVal MyString As String) As Boolean Return TrueEnd Function Delegate Function MyDelegate(ByVal MyString As String) As Boolean

Dim del As MyDelegate = AddressOf MyFunctionretval = del.Invoke(“Hello”)

Page 62: VB6 ->  VB.NET 2008

Events

nové klíčové slovo Handles

VB.Net Class Module

Public Event MyEvent()

Public RaiseIt()

RaiseEvent MyEvent

End Sub

VB.Net Client Project

Public WithEvents objClass As MyClass.Class1

Public Sub OnMyEvent() Handles objClass.MyEvent

code

End Sub

Page 63: VB6 ->  VB.NET 2008

Event handlers

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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click End Sub

AddHandler Button1.Click, AddressOf EventHandler

RemoveHandler Button1.Click, AddressOf EventHandler

Page 64: VB6 ->  VB.NET 2008

WIN32 APICOM/COM+

Page 65: VB6 ->  VB.NET 2008

Win32 API

<DllImport("kernel32.DLL”)> _ Public Shared Function MoveFile(src As String,....) As Boolean End Function

Page 66: VB6 ->  VB.NET 2008

COM - nevýhody

Nepřenositelnost na jiné platformy Manuální garbage collection Globální přístup – COM musí být registrován

pro celý počítač Binary compatibilita Není přímá dědičnost, pouze implementace

interfaces DLL Hell – problémy s verzemi IIS restart při aktualizaci COM komponent

používaných v ASP

Page 67: VB6 ->  VB.NET 2008

COM komunikace

Komponenty implementují IUnknown Počítá reference na komponentu

Při tvorbě komponenty pomocí CoCreateInstance a QueryInterface AddRef je automaticky volán Release musíme volat sami

Informace o komponentě jsou uloženy v .TLB Každá komponenta obsahuje unikátní ID

(GUID)

Page 68: VB6 ->  VB.NET 2008

COM & .NET

Components DCOM COM+ Recordset <no equivalent> IUnknown/IDispatch GUID/CLSID/etc

Assemblies Remoting EnterpriseServices DataSet Serialization <no equivalent> <no equivalent>

Page 69: VB6 ->  VB.NET 2008

Volání COM z .NET

Common Language Runtime

COM Server

Client

Runtime Callable Wrapper

Page 70: VB6 ->  VB.NET 2008

Volání COM z .NET

RCW Jedná se o managed třídu Řídí životnost COM objektů Při uvolnění RCW z paměti dojde k zavolání

IUnknown.Release pro všechny interfaces RCW

a) tlbimp myCom.dll /out: myNetCom.dll+ reference na myNetCom.dll

b) Add Reference na COM knihovnu ve VS.NETautomaticky se vytvoří Interop.myCom.dll

Každý objekt má vlastní wrapper

Page 71: VB6 ->  VB.NET 2008

Použití ActiveX Controls

Obdobné jako u ostatních COM komponent Generování .NET ActiveX wrapperu

a) aximp myActivex.ocx + reference na wrapper

b) Toolbox/Customize ve VS.NETautomaticky se vytvoří AxInterop.ocxname.dll

.NET ActiveX wrapper Pro .NET vystupuje jako .NET komponenta

Page 72: VB6 ->  VB.NET 2008

COM CallableWrapper

Common Language Runtime

Volání .NET komponenty z COM

COM ServerIUnknownIDispatch

IFoo

Client

Page 73: VB6 ->  VB.NET 2008

Volání .NET komponenty z COM

COM callable wrappera) Nastavit ve vlastnostech projektu Register for

COM interopb) Použít tlbexp.exe

CCW je plnohodnotný COM objekt (IDispatch,

IUnknown,...) V případě, že je počet referencí na CCW roven 0,

uvolní se sám z paměti Zpřístupnění assembly pro COM

Global Assembly Cache (GAC)

Page 74: VB6 ->  VB.NET 2008

COM Interop & Win32 API

demo

Page 75: VB6 ->  VB.NET 2008

WINDOWS FORMS

Page 76: VB6 ->  VB.NET 2008

WinForms

In VB 6 Form1.Show

In Visual Basic .NET Dim MyForm as New Form1 MyForm.Show()

Mohou dědit Vizuální dědičnost

Page 77: VB6 ->  VB.NET 2008

Míry

VB6 ScaleMode možno měnit

VB 2008 Vše se měří v pixelech

Page 78: VB6 ->  VB.NET 2008

ToolStrip Controls

Page 79: VB6 ->  VB.NET 2008

Vizuální módy

Professional System vlastní

Page 80: VB6 ->  VB.NET 2008

WebBrowser ovládací prvek

optimalizovaný „managed wrapper“ ActiveX prvku web browser control

standardní navigace – goback, goforward, atd.

Objket ObjectForScripting umožňující interakci pomocí skritpů

možnost přepsat některé chování IE kontextové menu accelerator keys

Page 81: VB6 ->  VB.NET 2008

SplitPanel

Náhrada za Splitter základem jsou 2 Panel prvky a Splitter Vertikální í horizontální orientace

Page 82: VB6 ->  VB.NET 2008

FlowLayoutPanel

rozložení ve stylu HTML automatické přemístění potomků Horizontální anebo vertikální směr toku Lišta na vkládání během designu

Page 83: VB6 ->  VB.NET 2008

TableLayoutPanel

rozložené ve stylu HTML tabulek sloupce a řádky absolutní, procentuální

velikost, automatické přeškálování

Page 84: VB6 ->  VB.NET 2008

Další ovládací prvky

MaskedTextBox MaskedTextProvider

ToolTip BubbleMode ikona a titulok

Page 85: VB6 ->  VB.NET 2008

Ovládací prvky

demo

Page 86: VB6 ->  VB.NET 2008

Ovládací prvky

VB6 VB2008

Frame GroupBox

Shape, Line N/A - .NET obsahuje GDI+

OLE N/A

Data N/A - .NET pracuje s daty zcela jinak

Control Arrays „Emulováno specielními objekty“ např. ButtonArray

Page 87: VB6 ->  VB.NET 2008

Dynamické přidávání prvků

'VB6Dim labelControl As ControlSet labelControl = Me.Controls.Add("VB.Label", "labelControl")labelControl.Visible = True Me.Controls.Remove "labelControl"

'VB2008Dim c As Controlc = New Label()c.Name = "labelControl"Me.Controls.Add(c) Me.Controls.RemoveByKey(tempControl)

Page 88: VB6 ->  VB.NET 2008

GDI+

System.Drawing GDI+

Transparency, antialiasing, alpha blending netradiční tvary formulářů

Podpora Flat (Office XP) a 3D stylů kontrolů Nativní práce s grafickými formáty (JPEG,

BMP,....) Podpora tisku

Page 89: VB6 ->  VB.NET 2008

GDI+

demo

Page 90: VB6 ->  VB.NET 2008

DATA

Page 91: VB6 ->  VB.NET 2008

Přístup k datům

VB6 ADO, RDO (VB 4.0), DAO (VB 3.0)

VB2008 ADO.NET ADO je nadále podporováno

Page 92: VB6 ->  VB.NET 2008

DataSet

Přístup k datům

Databáze

DataTable DataTable DataView

BindingSource BindingSource BindingSource

DataGridView DataGridView TextBox

TableAdapter TableAdapter TableAdapter

Page 93: VB6 ->  VB.NET 2008

Práce s daty

Vytvoření datového zdroje pomocí Data Source Configuration Wizard

Lze pomocí Drag & Drop umístit datový zdroj na formulář

Vytoří se: Silně typový dataset TableAdapter BindingSource

Page 94: VB6 ->  VB.NET 2008

Typový DataSet

Jednoduchý přístup k tabulkám a sloupcům v datasetu

NorthwindDataSet.Employees(0).FirstName = “Joe”NorthwindDataSet.Employees(0).FirstName = “Joe”

Page 95: VB6 ->  VB.NET 2008

TableAdapter

Komunikační vrstva mezi datasetem a databází

TableAdapter je generován pro každou tabulku

Lze použít pro Naplnění DataTable v datasetu

Spouštění dotazů Vykonávání uložených procedur Uložení změn do datového zdroje

EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees)

EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees)

Page 96: VB6 ->  VB.NET 2008

BindingSource

Poskytuje medoty pro navigaci: MoveFirst, MoveNext, MovePrevious, MoveLast

Poskutuje metody pro manipulaci s daty: Find, Filter, Sort, AddNew, and Remove

NamedRange

ListObject

LabelDatabáze Binding Source

Page 97: VB6 ->  VB.NET 2008

Aktualizace dat

Změny uložené do datasetu nejsou automaticky propagované do datového zdroje

Potřeba použít metodu TableAdapter.Update pro uložení změn

Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees)

Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees)

Page 98: VB6 ->  VB.NET 2008

Napojení na datové zdroje

možnost „drag&drop” sloupců

vytvoření UI pro data grid individuální ovládací prvky

automatické generování kódu

Page 99: VB6 ->  VB.NET 2008

DataGridView

Napojení na data SQL Server, SQL Server Express, jiné DB,

web.služby, uživatelsky definované objekty Virtuální režim

Virtuálně zobrazuje velký počet řádků Styly a události založené na buňkách (né

řádcích) Podpora Windows graf.témat V buňkách mohou být další ovládací prvky –

tlačítka, checkbox či link label Pracuje v bound i unbound režimu

Page 100: VB6 ->  VB.NET 2008

Práce s daty

demo

Page 101: VB6 ->  VB.NET 2008

Generics (VB 2005) Knihovny velmi často využívají typ object

Umožňuje pracovat s daty libovolného typu Použit pro položky, parametry a návratové

hodnoty Uvedená technika ale vytváří mnoho problémů

Chybějící typová kontrola při překladu Lze použít nevhodné nebo nekompatibilní typy

Zbytečná provize při použití hodnotových typů Boxing, unboxing a typová kontrola za běhu aplikace

Potenciální provize při použití referenčních typů Typová kontrola za běhu aplikace při konverzi výsledků

Obtěžující a nevzhledné typové konverze

Page 102: VB6 ->  VB.NET 2008

Dim seznam As Stack = New Stack()// Parametr je typu object a Proběhne implicitní konverzeseznam.Push(new Pracovnik() )// Návratová hodnota je typu object, explicitní konverzeDim zam As Pracovnik = Ctype(seznam.Pop(), Pracovnik)// Hodnotový typ - integerDim velikost As Stack = New Stack()// Proběhne Boxingvelikost.Push( 42 )// Proběhne UnboxingDim size1 As Integer = Ctype(sizes.Pop(), Integer)// Nevhodné a překladač neodhalísizes.Push( 77 )sizes.Push( new Pracovnik() )// Překlad v pořádku, ale nastane výjimka

InvalidCastExceptionDim size2 As Integer = Ctype(sizes.Pop(), Integer)

Page 103: VB6 ->  VB.NET 2008

Dim employees As Stack(Of Employee) = new Stack(Of Employee)()

// No conversion requiredemployees.Push(New Employee() )

// No conversion requiredDim emp as Employee = employees.Pop()

Dim sizes As Stack(Of Integer) = new Stack(Of Integer)()

// No boxingsizes.Push( 42 )

// No unboxingDim size1 As Integer = sizes.Pop()sizes.Push( 77 )

// Error!, compile-time errorsizes.Push( new Employee() )

//OKDim size2 As Integer = sizes.Pop()

Page 104: VB6 ->  VB.NET 2008

Jak fungují Generics

object int

object int

object int

object int

boxing

int

vložení

bez Generics

object int

unboxing

int

výběr

int

int

int

int

vložení

s Generics

int

výběr

Page 105: VB6 ->  VB.NET 2008

LINQ (VB 9.0)

C# 3.0Visual Basic

9.0Ostatní

.NET Language Integrated Query

LINQ toObjects

LINQ toDataSet

s

LINQ toSQL

LINQ toEntities

LINQ toXML

Objekty

<book> <title/> <author/> <year/> <price/></book>

XMLRelační data

Page 106: VB6 ->  VB.NET 2008

LINQ to SQL

Dim db As New NorthwindDataContext()

Dim matchingCustomers = From cust In db.Customers _ Where cust.CompanyName.Contains("Market") _ Order By cust.ContactName _ Select cust

Page 107: VB6 ->  VB.NET 2008

LINQ to objects

Dim numbers() As Integer = {1, 4, 2, 7, 8, 9} Dim evenNumbers = From num In numbers _

Where num Mod 2 = 0 _ Select num

Class Person Public Age As Integer Public Name As StringEnd Class

Dim people As New List(Of Person)

Dim teenagers = From person In people _ Where person.Age > 12 And person.Age < 20 _ Select person

Page 108: VB6 ->  VB.NET 2008

LINQ to XML

Dim doc As XDocument =<?xml version="1.0" encoding="UTF-16" standalone="yes"?> <organizer> <contacts> <contact category="home"> <name>Oliver Cox</name> </contact> <contact category="home"> <name>Tony Madigan</name> </contact> <contact category="work"> <name>Justin Thorp</name> </contact> </contacts> </organizer>

Dim contacts = From cont In doc...<contact> _ Where cont.@category = "home" _

Select cont

Page 109: VB6 ->  VB.NET 2008

MIGRACE

Page 110: VB6 ->  VB.NET 2008

Převod projektu

demo

Page 111: VB6 ->  VB.NET 2008

Zdroje

Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005 http://msdn2.microsoft.com/en-us/library/aa480541.

aspx Free Book - Introducing Microsoft Visual Basic

2005 for Developers http://msdn2.microsoft.com/en-us/vbrun/ms788235.

aspx http://www.windowsforms.net