老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

關(guān)于ofvb.net的信息

vb和vb.net的區(qū)別

VB.NET和VB6.0有什么區(qū)別

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了西盟免費(fèi)建站歡迎大家使用!

Visual Basic .NET是Microsoft Visual Studio .NET套件中主要組成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化為完全面向?qū)ο螅ň拖馛++)的編程語(yǔ)言。本文將介紹VB.NET的新特性,并比較VB6.0/VB.NET之間的區(qū)別,闡述如何利用VB.NET編寫(xiě)簡(jiǎn)單的應(yīng)用程序。

1.1 什么是 VB.NET? Microsoft推出全新的編程和操作系統(tǒng)Framework——.NET,支持多種語(yǔ)言利用公共.NET庫(kù)開(kāi)發(fā)應(yīng)用程序,這些應(yīng)用程序在.NET Framework上運(yùn)行。使用Visual Basic在.NET Framework上編程,這就是VB.NET。

首先,讓我演示在VB.NET中寫(xiě)最簡(jiǎn)單的控制臺(tái)程序:Hello World。

1.2 Hello, World!“Hello World!”是初學(xué)者學(xué)習(xí)Windows編程的代表性程序。我們的第一個(gè)程序就叫做“Hello VB.NET World!”。該程序在控制臺(tái)輸出一句話:“Hello VB.NET World!”,代碼如下所示:

代碼 1.1: Hello VB.NET World例子Imports System

Module Module1

Sub Main()

System.Console.WriteLine("Hello VB.NET World!")

End Sub

End Module

1.3 VB.NET 編輯器和編譯器你可以在記事本或VS.NET IDE等任意文本編輯器中撰寫(xiě)上述代碼,然后保存為HelloWorld.vb。 代碼編寫(xiě)完成之后,要么在命令行、要么在VS.NET IDE中編譯它。在Microsoft .NET Framework SDK中已經(jīng)包括VB.NET編譯器vbc.exe[][1],從IDE或是命令行都可以調(diào)用。要從命令行編譯HelloWorld.vb,請(qǐng)?jiān)诿钚写翱谳斎?/p>

vbc HelloWorld.vb /out:HelloWorld.exe /t:exe

編譯結(jié)束后,HelloWorld.exe被創(chuàng)建到當(dāng)前目錄下。在資源管理其中雙擊圖標(biāo)或在命令行執(zhí)行,程序正確地運(yùn)行了。祝賀你進(jìn)入VB.NET開(kāi)發(fā)者的行列。

Imports 語(yǔ)句

如你所知,大部分的.NET類(lèi)型都在名字空間(namespace)中定義。Namespace是定義和管理類(lèi)別的范疇。察看.NET Framework Class Library,可以看到數(shù)以百計(jì)的namespace。例如,System namespace就包括了Console、Object等類(lèi)型定義。如果想使用Console類(lèi),需要用Imports指令導(dǎo)入System namespace。如下所示:

Imports System甚至可以明確地調(diào)用namespace而無(wú)需用Import導(dǎo)入。下面的例子展示了不用Import的“Hello World!”程序:

代碼1.2: Hello VB.NET World例子Module Module1

Sub Main()

System.Console.WriteLine("Hello VB.NET World!")

End SubEnd Module1.4 解析 "Hello VB.NET World!"程序第一行是:

Imports System; System namespace定義了Console類(lèi),該類(lèi)用于讀寫(xiě)控制臺(tái)(命令行窗口)。然后你定義了一個(gè)module:Module Module1

…End Module所有的VB程序都包括一個(gè)Main()方法,即應(yīng)用程序入口點(diǎn)。在例子程序中,我們調(diào)用Console.WriteLine()向控制臺(tái)寫(xiě)入“Hello VB.NET World!”:

Sub Main()

Console.WriteLine(“Hello VB.NET World!”) End SubWriteLine()方法歸屬于Console類(lèi),它負(fù)責(zé)向控制臺(tái)寫(xiě)一個(gè)帶有行結(jié)束符的字符串。如前所述,Console類(lèi)定義于System namespace,你通過(guò)直接引用來(lái)控制類(lèi)成員。

Console類(lèi)負(fù)責(zé)讀寫(xiě)系統(tǒng)控制臺(tái)。讀控制臺(tái)輸入用Read和ReadLine方法,向控制臺(tái)輸出用WriteLine方法。

表1.1 Console類(lèi)定義的方法

方法 用途 例子

Read 讀入單個(gè)字符 int i = Console.Read();

ReadLine 讀入一行 string str = Console.ReadLine();

Write 寫(xiě)一行 Console.Write("Write: 1");

WriteLine 寫(xiě)一行,并帶上行結(jié)束符

Console.WriteLine("Test Output Data with Line");

1.5 VB.NET有什么新特點(diǎn)? VB.NET比 VB6.0更加穩(wěn)定,而且完全面向?qū)ο?。也許你還記得,VB6.0不支持繼承、重載和接口,所以不是真正面向?qū)ο蟮?。而VB.NET則支持這些面向?qū)ο筇匦?。VB6.0有兩個(gè)薄弱環(huán)節(jié)——多線程和異常處理。在VB.NET中,開(kāi)發(fā)多線程應(yīng)用和使用C++/C#別無(wú)二致,結(jié)構(gòu)化異常處理也得到支持。稍后我們會(huì)詳細(xì)解釋這些特性。

下面是VB.NET的特性列表——

·面向?qū)ο蟮木幊陶Z(yǔ)言。支持繼承、重載、接口、共享成員和構(gòu)造器?!ぶС炙械腃LS特性,如存取控制.NET類(lèi)、與其它.NET語(yǔ)言交互、元數(shù)據(jù)、公共數(shù)據(jù)類(lèi)型、委托等等。·多線程支持?!そY(jié)構(gòu)化異常處理。 1.6 名字空間與集合 前面討論了我們的第一個(gè)VB.NET程序。該程序中首先引人注意的是名字空間(namespace)。在.NET參考文檔中,你會(huì)發(fā)現(xiàn)每個(gè)類(lèi)都?xì)w屬于某個(gè)namespace。那么,namespace到底是什么?

一個(gè)namespace是類(lèi)和組件的邏輯組合,其目的在于將.NET class按類(lèi)別定義。微軟借用了C++ class packaging概念:namespace來(lái)描述這種組合。.NET Framework中的組件被稱(chēng)為集合(assembly)。全部.NET代碼在數(shù)百個(gè)庫(kù)文件(DLL)中定義。Namespace把a(bǔ)ssembly中定義的類(lèi)組織起來(lái)。一個(gè)namespace可以包括多個(gè)assembly,一個(gè)assembly也可以在多個(gè)namespace中定義。 namespace樹(shù)的根節(jié)點(diǎn)是System namespace。在.NET Library中,每個(gè)class都在一組相似的類(lèi)別中定義。例如,System.Data namespace只包括數(shù)據(jù)相關(guān)類(lèi)。同樣,System.Multithreading只包括多線程類(lèi)。

在使用.NET支持的語(yǔ)言(如C#、VB.NET、C++.NET等)創(chuàng)建新應(yīng)用程序時(shí),你會(huì)注意到每個(gè)應(yīng)用程序都被定義為一個(gè)namespace,而所有的class都?xì)w屬于這個(gè)namespace。通過(guò)引用這個(gè)namespace,其它應(yīng)用程序就能存取這些class。 在.NET中,代碼被編譯為中間語(yǔ)言(Intermediate Language,IL),assembly中存儲(chǔ)了IL代碼、元數(shù)據(jù)和其它資源文件。同一個(gè)assembly可以附屬于一個(gè)或多個(gè)Exe/DLL。所有的.NET庫(kù)都存儲(chǔ)在assembly中。

1.7 VB.NET: 完全面向?qū)ο蟮木幊陶Z(yǔ)言抽象、封裝、多態(tài)、繼承是面向?qū)ο笳Z(yǔ)言的四個(gè)基本屬性。VB6.0不支持繼承,而VB.NET則不然。所以,和C++一樣,VB.NET也是完全面向?qū)ο蟮木幊陶Z(yǔ)言。

Class 和 ModuleVB.NET用Class...End Class語(yǔ)句對(duì)創(chuàng)建class。每個(gè)VB.NET至少包括一個(gè)Module(模塊)。Module在Module…End Module語(yǔ)句對(duì)中實(shí)現(xiàn)。應(yīng)用程序的主要模塊是Main方法,亦即應(yīng)用程序入口點(diǎn)。

和VB6.0相似的地方是,都可以使用Function/Sub關(guān)鍵字定義方法。下面的例子顯示了如何創(chuàng)建class、添加方法,并從主程序調(diào)用方法: Imports System

Module Module1

Sub Main()

Dim cls As TestClass = New TestClass

Console.WriteLine(cls.MyMethod)

End Sub

Class TestClass

Function MyMethod() As String

Return "Test Method"

End Function

End Class

End ModuleProperty屬性(Property)是類(lèi)變量的公共描述。Property…End Property語(yǔ)句用以創(chuàng)建property。屬性的Get/Set方法分別用于取得和設(shè)置屬性值。下面的例子中,Data是TestClass的屬性。

Imports System

Imports System.Console

Module Module1

Sub Main()

Dim cls As TestClass = New TestClass

WriteLine(cls.MyMethod)

WriteLine(cls.Data)

cls.Data = "New Data"

WriteLine(cls.Data)

End Sub

End Module

Class TestClass

Private strData As String = "Some Data"

Function MyMethod() As String

Return "Test Method!"

End Function

' Adding Data property to the class

Public Property Data() As String

Get

Return strData

End Get

Set(ByVal Value As String)

strData = Value

End Set

End Property

重載VB.NET通過(guò)overload關(guān)鍵字支持方法重載。使用這個(gè)關(guān)鍵字,你可以定義同名但不同參數(shù)的方法。

類(lèi)成員訪問(wèn)域

除了原有的Private和Public,VB.NET引入了幾個(gè)新關(guān)鍵字。全部訪問(wèn)域關(guān)鍵字列表如下:

關(guān)鍵字 作用域

Private 限于class內(nèi)部

Public 可以從class外訪問(wèn)

Friend 限于class所屬的應(yīng)用程序內(nèi)

Protected 只能被class和其派生類(lèi)訪問(wèn)

Protected Friend 能被class、應(yīng)用程序和派生類(lèi)訪問(wèn)

繼承繼承是面向?qū)ο缶幊陶Z(yǔ)言中最常用的技術(shù)。繼承讓你能夠重用類(lèi)代碼和功能。

VB.NET支持繼承,而VB6.0則不支持。繼承的好處在于你能使用任何人編寫(xiě)的類(lèi),從這些類(lèi)派生自己的類(lèi),然后在自己的類(lèi)中調(diào)用父類(lèi)功能。在下面的例子中,Class B派生自Class A,我們將從Class B中調(diào)用Class A的方法MethodA。

Imports System

Imports System.Console

Module Module1

Sub Main()

Dim bObj As B = New B

WriteLine(bObj.MethodA())

End Sub

End Module

' Class A defined

Public Class A

Function MethodA() As String

Return "Method A is called."

End Function

End Class

'Class B, inherited from Class A. All members (Public and Protected)

' can be access via B now.

Public Class B

Inherits A

Function MethodB() As String

Return "Method B is called."

End Function

End Class

可以從一個(gè)class中派生多個(gè)自定義class,也可以從多個(gè)class派生一個(gè)自定義class。

共享的成員類(lèi)的共享成員被類(lèi)的所有實(shí)體共享。共享成員可能是屬性、方法或字段/值域。在你不想讓用戶全面控制自己的類(lèi)時(shí),共享成員相當(dāng)有用。例如,你可以開(kāi)發(fā)一個(gè)類(lèi)庫(kù),讓用戶通過(guò)共享成員使用其中的部分功能。

可以通過(guò)class本身引用共享成員,而無(wú)需通過(guò)類(lèi)的實(shí)體。例如:Module Module1

Sub Main()

WriteLine(A.MethodA())

End Sub

End Module

' Class A defined

Public Class A

Shared Function MethodA() As String

Return "Method A is called."

End Function

End Class

多線程VB語(yǔ)言的一大弱點(diǎn)就是缺乏編寫(xiě)自由線程(free-threaded)程序的能力。在.NET Framework中,所有語(yǔ)言共享CRL(Common Runtime Library,公共運(yùn)行庫(kù)),也就是說(shuō),你可以用VB.NET、C#或其它.NET語(yǔ)言編寫(xiě)同樣的程序。

System.Threading namespace定義了線程類(lèi)。我們只需要引入System.Threading namespace,即可使用線程類(lèi)。

System.Threading.Thread類(lèi)提供線程對(duì)象,可以使用Thread類(lèi)創(chuàng)建或破壞線程。

創(chuàng)建線程使用Thread類(lèi)的實(shí)體創(chuàng)建一個(gè)新線程,然后用Thread.Start方法開(kāi)始執(zhí)行線程。線程構(gòu)造器接受一個(gè)參數(shù),該參數(shù)指明你要在線程中執(zhí)行的procedure。在下例中,我想在oThread1(Thread類(lèi)的一個(gè)實(shí)體)的第二線程中執(zhí)行SecondThread過(guò)程:

oThread1 = New Thread(AddressOf SecondThread)

SecondThread procedure looks like below:

Public Sub SecondThread()

Dim i As Integer

For i = 1 To 10

Console.WriteLine(i.ToString())

Next

End Sub

然后,調(diào)用Thread.Start()開(kāi)始線程:

oThread1.Start()

下面的代碼創(chuàng)建兩個(gè)第二線程:

Imports System

Imports System.Threading

Module Module1

Public oThread1 As Thread

Public oThread2 As Thread

Sub Main()

oThread1 = New Thread(AddressOf SecondThread)

oThread2 = New Thread(AddressOf ThirdThread)

oThread1.Start()

oThread2.Start()

End Sub

Public Sub SecondThread()

Dim i As Integer

For i = 1 To 10

Console.WriteLine(i.ToString())

Next

End Sub

Public Sub ThirdThread()

Dim i As Integer

For i = 1 To 10

Console.WriteLine("A" + i.ToString())

Next

End Sub

End Module

破壞線程 調(diào)用Abort方法來(lái)破壞(中止)一個(gè)線程。在調(diào)用Abort之前,確保用IsAlive判斷線程處于活動(dòng)狀態(tài)。

If oThread1.IsAlive Then

oThread1.Abort()

End If

暫停線程可以使用Sleep方法來(lái)暫停線程執(zhí)行。Sleep方法接受一個(gè)以毫秒為單位的參數(shù),指明線程應(yīng)當(dāng)暫停多長(zhǎng)時(shí)間。

下面的例子讓線程暫停1秒鐘:

oThread2.Sleep(1000)你也可以使用Suspend和Resume方法來(lái)掛起和繼續(xù)線程執(zhí)行。

設(shè)定線程優(yōu)先級(jí)Thread類(lèi)的Priority屬性用于設(shè)定線程優(yōu)先級(jí)。該屬性可以設(shè)置為Normal,AboveNormal,BelowNormal,Highest和Lowest。如:

oThread2.Priority = ThreadPriority.Highest線程與Apartment使用ApartmentState屬性設(shè)置線程的apartment類(lèi)型,該屬性值可以為STA,MTA或是Unknown[][2]:

oThread.ApartmentState = ApartmentState.MTAMTS意味著可以使用多線程模式,而STA則只能是單線程執(zhí)行。

Public Enum ApartmentState

{

STA = 0,

MTA = 1,

Unknown = 2,

}

1.8 結(jié)構(gòu)化異常處理異常處理也被稱(chēng)之為錯(cuò)誤處理。作為VB程序員,你一定對(duì)On Error Goto和On Error Resume Next這些VB6.0錯(cuò)誤處理語(yǔ)句耳熟能詳。這種類(lèi)型的錯(cuò)誤處理被稱(chēng)為非結(jié)構(gòu)化異常處理(Unstructured Exception Handling)。而在VB.NET中,Microsoft推出了結(jié)構(gòu)化異常處理機(jī)制。VB.NET支持類(lèi)似C++的TryCatch..Finally控制。Try..Catch..Finally結(jié)構(gòu)如下: Try

' 可能導(dǎo)致異常的代碼

Catch

' 當(dāng)異常發(fā)生時(shí)處理異常的代碼

Finally

' 清理現(xiàn)場(chǎng)

End Try

Try語(yǔ)句塊用以拋出異常。如果異常發(fā)生,在Catch語(yǔ)句塊中處理。Finally語(yǔ)句塊是可選的,在需要釋放資源時(shí)特別有用。

1.9 VB6.0與VB.NET的不同之處除了上面談到的語(yǔ)言進(jìn)化,還有一些語(yǔ)法上的變化。所有這些語(yǔ)言和語(yǔ)法的變化在MSDN中均可查到,本文只作簡(jiǎn)單介紹。

數(shù)據(jù)類(lèi)型(Data Type)的改變VB.NET中有些數(shù)據(jù)類(lèi)型得到改進(jìn)。下面是變化對(duì)照表。

數(shù)據(jù)類(lèi)型 VB6.0 VB.NET

Integer 16 bit size 32 bit size

Long 32 bit size 64 bit size

Currency 用于存儲(chǔ)大浮點(diǎn)數(shù) 被decimal替代,支持更高精度

Variant 可以存儲(chǔ)任意類(lèi)型數(shù)據(jù) 被Object類(lèi)型替代,也可以存儲(chǔ)任意類(lèi)型數(shù)據(jù),但結(jié)果更好

Date Date類(lèi)型被存儲(chǔ)為double 引入DateTime類(lèi)型,用于存儲(chǔ)不同格式的日期

在VB.NET中,Short數(shù)據(jù)類(lèi)型是16 bit的。Short,Integer和Long都等同于CLR的System.Int16、System.Int32和System.Int64類(lèi)型。 變量聲明的變化在VB6.0中,變量聲明有許多限制。其中之一就是不能同行聲明多個(gè)變量。如果一定要在一行中聲明多個(gè)變量,就一定得指明每個(gè)變量的類(lèi)型,否則將被默認(rèn)為Variant類(lèi)型。

Dim a1, a2 As Integer Dim a3 As Integer, a4 As Integer 第一行中的a1是Variant類(lèi)型,a2是Integer類(lèi)型。第二行中兩個(gè)變量都是Integer類(lèi)型。VB.NET支持同行聲明多個(gè)變量,舉例如下:

Dim a1, a2, a3 As Integer 變量初始化是另一個(gè)問(wèn)題。在VB6.0中不能同時(shí)聲明和初始化變量,而VB.NET則支持這個(gè)特性。

Dim name As String = "Mahesh"System.Console.Write(name) 聲明常量也可以照此辦理:Const DT_COUNT As Integer = 23 New關(guān)鍵字。在VB.NET中,New關(guān)鍵字用于創(chuàng)建對(duì)象。由于數(shù)據(jù)類(lèi)型是對(duì)象,所以New關(guān)鍵字用以創(chuàng)建一個(gè)數(shù)據(jù)類(lèi)型對(duì)象。

Dim i As Integer = New Integer()i = 10System.Console.WriteLine(i.ToString()) 代碼塊級(jí)別支持。像C++一樣,VB.NET支持代碼塊級(jí)別的作用域檢查。在語(yǔ)句塊中聲明的變量只在塊內(nèi)有效。

For i = 1 To 10Dim p As LongSystem.Console.WriteLine(i.ToString())NextSystem.Console.WriteLine(p.ToString()) 這段代碼在VB.NET中會(huì)得到一個(gè)編譯錯(cuò)誤,因?yàn)閜在For..Next語(yǔ)句塊之外不可訪問(wèn)。在VB6.0中這段代碼可以通過(guò)。

改進(jìn)了的類(lèi)型安全

在VB6.0中,當(dāng)你聲明一個(gè)對(duì)外部過(guò)程的引用時(shí),可以指定任意類(lèi)型的參數(shù)為As Any。Any關(guān)鍵字禁止了類(lèi)型檢查,允許任意數(shù)據(jù)類(lèi)型傳入和返回。

VB.NET不支持Any關(guān)鍵字。你必須指定每個(gè)參數(shù)和返回值的數(shù)據(jù)類(lèi)型。數(shù)組VB.NET對(duì)數(shù)組作了明顯的改動(dòng)。

數(shù)組范圍。在VB.NET中,你需要格外留意數(shù)組范圍問(wèn)題。VB6.0默認(rèn)數(shù)組下界為0,故數(shù)組中的元素?cái)?shù)量等與數(shù)組上界值加一。下面的數(shù)組界限從A(0)到A(10),共有11個(gè)元素:

Dim A(10) As Single可以使用Option Base改變下界值為1。在VB.NET中,數(shù)組和C++一樣,下界值為0,不支持Option Base。注意:MSDN文檔指出數(shù)組只能包括與其尺寸相等的元素?cái)?shù)量,例如:Dim A(10) As Integer 只能包括10個(gè)元素(從A(0)到A(9)),但在編譯下面這段代碼時(shí)我發(fā)現(xiàn)它運(yùn)行良好,看起來(lái)數(shù)組中容納了11個(gè)元素。

Dim A(10) As Integer A(0) = 12 A(2) = 24 A(10) = 23 System.Console.WriteLine(A(0).ToString()) System.Console.WriteLine(A(10).ToString())System.Console.WriteLine(UBound(A).ToString()) System.Console.WriteLine(LBound(A).ToString()) Lbound和Ubound分別返回 0與10。ReDim和Fixed Array。你可以在VB6.0中指定固定長(zhǎng)度的數(shù)組。

Dim ArrWeekDays(0 To 6) As Integer

這里的ArrWeekDays數(shù)組是固定長(zhǎng)度的,不能用ReDim語(yǔ)句改變長(zhǎng)度。VB.NET不支持固定長(zhǎng)度數(shù)組,所以ReDim總是有效。

可以用下面兩種方式聲明數(shù)組: Dim ArrWeekDays(6) As IntegerDim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6} ReDim語(yǔ)句。在VB6.0中,ReDim用于初始化動(dòng)態(tài)數(shù)組。在VB.NET中你不能把它當(dāng)作聲明用。ReDim只能用于改變數(shù)組長(zhǎng)度,不過(guò)不能改變數(shù)組維度。

Variant對(duì)陣ObjectVB6.0中的Variant數(shù)據(jù)類(lèi)型能存儲(chǔ)任意類(lèi)型變量,VB.NET中Object具備相同能力。

算術(shù)操作符VB.NET支持類(lèi)似C++的快捷方式。下面的表格顯示了常規(guī)操作與快捷操作的不同之處??旖莘绞揭部捎糜?、/、|、等操作符。

操作符 常規(guī)語(yǔ)法 快捷方式加法 A = A+5 A +=5 減法 A = A – 5 A -+ 5固定長(zhǎng)度字符串

在VB6.0中,可以在聲明字符串時(shí)指定其長(zhǎng)度。VB.NET不支持固定長(zhǎng)度字符串。

布爾操作符VB6.0中的And、Or或是Xor語(yǔ)句是按位操作符。而在VB.NET中,它們是布爾操作符。執(zhí)行這些操作將返回true或false。VB.NET引入新操作符來(lái)完成按位操作。

操作符 描述 BitAnd 按位AndBitOr 按位OrBitXor 按位XorBitNot 按位Not結(jié)構(gòu)與自定義類(lèi)型在VB6.0中,你使用Type…End Type語(yǔ)句塊創(chuàng)建結(jié)構(gòu)或自定義類(lèi)型。例如:

Type StdRec

StdId As Integer

StdName As String End Type

VB.NET引入新的語(yǔ)法:Structure。Type…End Type不再被支持。Structure…End Structure與C++用法相同??梢灾付ńY(jié)構(gòu)中每個(gè)元素的可訪問(wèn)域,如Public、Protected、Friend、Protected Friend、Private等。例如:

Structure StdRec

Public StdId As Integer Public StdName As String

Private StdInternal As String End StructureVB.NET中的Structures就像類(lèi)一樣,也可以擁有方法和屬性。New和Nothing關(guān)鍵字VB6.0中,AS New和Nothing關(guān)鍵字用于聲明一個(gè)對(duì)象并初始化它。 VB.NET不支持隱式創(chuàng)建對(duì)象。如前所言,甚至連數(shù)據(jù)類(lèi)型都是對(duì)象。你可以采用以下兩種方法創(chuàng)建數(shù)據(jù)類(lèi)型或?qū)ο螅?Dim i As Integer Dim i As Integer = New Integer() // Do something if i = Nothing Then End If 不支持Set語(yǔ)句VB6.0使用Set語(yǔ)句指派對(duì)象。例如:Set myObj = new MyObjectSet a = b在VB.NET中,不需要使用Set指派對(duì)象。例如:myObj = new MyObj()a = b過(guò)程(procedure)語(yǔ)法的變化在VB.NET中過(guò)程語(yǔ)法有了很多變化。例如類(lèi)似C++的過(guò)程調(diào)用方式、ByVal(傳值)為默認(rèn)類(lèi)型、Optional關(guān)鍵字、return語(yǔ)句等等。類(lèi)似C++的過(guò)程調(diào)用方式 VB6.0允許不用加圓括號(hào)調(diào)用過(guò)程(sub)。不過(guò),用Call語(yǔ)句調(diào)用函數(shù)或sub時(shí),一定要使用圓括號(hào)。例如:Dim I as IntegerCall EvaluateData(2, i) EvaluateData 2, i 在VB.NET中,所有的方法調(diào)用都需要圓括號(hào),而Call語(yǔ)句則是可選的。 ByVal是默認(rèn)參數(shù)類(lèi)型在VB6.0中,在調(diào)用函數(shù)或sub時(shí)ByRef(傳址)是默認(rèn)類(lèi)型。那意味著所有改變將反映到傳入的變量。VB.NET改變了這種方式。現(xiàn)在,默認(rèn)的參數(shù)類(lèi)型是ByVal(傳值)。 Optional關(guān)鍵字VB6.0使用Optional關(guān)鍵字可用來(lái)讓用戶決定傳入一個(gè)默認(rèn)值,之后在調(diào)用IsMissing函數(shù)判斷參數(shù)是否有效。 而在VB.NET中,每個(gè)可選參數(shù)必須聲明其默認(rèn)值,無(wú)需調(diào)用IsMissing函數(shù)。例如:Sub MyMethod(Optional ByVal i As Integer = 3)

Return語(yǔ)句VB.NET的Return語(yǔ)句與C++相似。使用Return語(yǔ)句把控制權(quán)從過(guò)程返還給調(diào)用者。在VB6.0中,Return語(yǔ)句與GoSub語(yǔ)句一起使用。VB.NET不再支持GoSub語(yǔ)句。流程控制的改變下面是VB.NET對(duì)流程控制語(yǔ)句的修改:1. GoSub不再受到支持。2. Call、Function和Sub語(yǔ)句均可用于調(diào)用過(guò)程。3. On ... GoSub和On ... GoTo語(yǔ)句不再受支持??梢允褂肧elect Case語(yǔ)句來(lái)替代。4. While ... Wend語(yǔ)句現(xiàn)在改為While…End While語(yǔ)句。不再支持Wend關(guān)鍵字。小結(jié) Visual Basic .NET是.NET版本的Visual Basic,已經(jīng)從根本發(fā)生了變化!通過(guò)本文你了解到VB6.0和VB.NET的區(qū)別是很大的,可以說(shuō)根本就是兩種不同的語(yǔ)言,因?yàn)樗鼈兊膬?nèi)核發(fā)生了變化,VB6.0是基于COM而vb.net是基于.net框架的,因?yàn)檫@個(gè)變化,所以在構(gòu)造類(lèi)時(shí)也發(fā)生了根本性的變化。

VB.NET怎么安裝

VB.NET安裝部署一).創(chuàng)建部署項(xiàng)目

1. 在“文件”菜單上指向“添加項(xiàng)目”,然后選擇“新建項(xiàng)目”。

2. 在“添加新項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類(lèi)型”窗格中的“安裝和部署項(xiàng)目”,然后選擇“模板”窗格中的“安裝項(xiàng)目”。在“名稱(chēng)”框中鍵入 setup1。

3. 單擊“確定”關(guān)閉對(duì)話框。

4. 項(xiàng)目被添加到解決方案資源管理器中,并且文件系統(tǒng)編輯器打開(kāi)。

5. 在“屬性”窗口中,選擇 ProductName 屬性,并鍵入 信息管理系統(tǒng) 。

VB.NET安裝部署二).將 主程序 項(xiàng)目的輸出添加到部署項(xiàng)目中

1. 在“文件系統(tǒng)編輯器”中,選擇“應(yīng)用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項(xiàng)目輸出”。

2. 在“添加項(xiàng)目輸出組”對(duì)話框中,選擇“項(xiàng)目”下拉列表中的“你的程序”。

3. 單擊“確定”關(guān)閉對(duì)話框。

4. 從列表中選擇“主輸出”和“內(nèi)容文件”組,然后單擊“確定”。

VB.NET安裝部署三).創(chuàng)建安裝程序類(lèi)

1. 在“文件”菜單上指向“新建”,然后選擇“項(xiàng)目”。

2. 在“新建項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類(lèi)型”窗格中的“Visual Basic 項(xiàng)目”,然后選擇“模板”窗格中的“類(lèi)庫(kù)”。在“名稱(chēng)”框中鍵入 installDB。

3. 單擊“打開(kāi)”關(guān)閉對(duì)話框。

4. 從“項(xiàng)目”菜單中選擇“添加新項(xiàng)”。

5. 在“添加新項(xiàng)”對(duì)話框中選擇“安裝程序類(lèi)”。在“名稱(chēng)”框中鍵入 installDB。

6. 單擊“確定”關(guān)閉對(duì)話框。

7. 詳細(xì)代碼附后。

VB.NET安裝部署四).創(chuàng)建自定義安裝對(duì)話框

1. 在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。

2. 在用戶界面編輯器中,選擇“安裝”下的“啟動(dòng)”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加對(duì)話框”。

3. 在“添加對(duì)話框”對(duì)話框中,選擇“許可協(xié)議”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。

4. 在“添加對(duì)話框”對(duì)話框中,選擇“文本框 (A)”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。

5. 在“操作”菜單上,選擇“上移”。重復(fù)此步驟,直到“文本框 (A)”對(duì)話框位于“安裝文件夾”節(jié)點(diǎn)之上。

6. 在“屬性”窗口中,選擇 BannerText 屬性并鍵入:安裝數(shù)據(jù)庫(kù).

7. 選擇 BodyText 屬性并鍵入:安裝程序?qū)⒃谀繕?biāo)機(jī)器上安裝數(shù)據(jù)庫(kù)

8. 選擇 Edit1Label 屬性并鍵入:數(shù)據(jù)庫(kù)名稱(chēng):

9. 選擇 Edit1Property 屬性并鍵入 CUSTOMTEXTA1

10. 選擇 Edit1Value 屬性并鍵入:dbservers

11. 選擇 Edit2Label 屬性并鍵入:服務(wù)器名:

12. 選擇 Edit2Property 屬性并鍵入 CUSTOMTEXTA2

13. 選擇 Edit2Value 屬性并鍵入:(local)

14. 選擇 Edit3Label 屬性并鍵入:用戶名:

15. 選擇 Edit3Value 屬性并鍵入:sa

16. 選擇 Edit3Property 屬性并鍵入 CUSTOMTEXTA3

17. 選擇 Edit4Label 屬性并鍵入:密碼:

18. 選擇 Edit4Property 屬性并鍵入 CUSTOMTEXTA4

19. 選擇 Edit2Visible、Edit3Visible 和 Edit4Visible 屬性,并將它們?cè)O(shè)置為 true

VB.NET安裝部署五).創(chuàng)建自定義操作

1. 在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。

2. 在自定義操作編輯器中選擇“安裝”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加自定義操作”。

3. 在“選擇項(xiàng)目中的項(xiàng)”對(duì)話框中,雙擊“應(yīng)用程序文件夾”。

4. 選擇“主輸出來(lái)自 installDB(活動(dòng))”項(xiàng),然后單擊“確定”關(guān)閉對(duì)話框。

5. 在“屬性”窗口中,選擇 CustomActionData 屬性并鍵入“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]/"”。

附:/targetdir="[TARGETDIR]/"是安裝后的目標(biāo)路徑,為了在installDB類(lèi)中獲得安裝后的路徑,我們?cè)O(shè)置此參數(shù)。

VB.NET安裝部署六).添加文件

1. 將SQL Server備份成文件DB.dat添加到“setup1”項(xiàng)目(在企業(yè)管理器中右擊數(shù)據(jù)庫(kù)-所有工作-備份數(shù)據(jù)庫(kù),備份成一個(gè)文件,取名為DB.dat)

2. 將安裝文件LisenceFile.rtf添加到“setup1”項(xiàng)目

3. 在用戶界面編輯器中,選擇許可協(xié)議,設(shè)置LisenceFile屬性為L(zhǎng)isenceFile.rtf文件

4.一般會(huì)自動(dòng)將依賴(lài)項(xiàng)添加到“檢測(cè)到的依賴(lài)項(xiàng)”,如果沒(méi)有,那么我們要手動(dòng)將其加入步驟5)

Crystal_Managed2003.msm

(如果有水晶報(bào)表)

dotnetfxredist_x86.msm

(.net一定是必須的)

... (如果有引用其他的dll)

5.如果使用了水晶報(bào)表,手動(dòng)加入要包含的文件:項(xiàng)目--添加--合并模塊(添加你的程序文件) (包括dotNetFramework和MDAC27),位于:C:/Program Files/Common Files/Merge Modules/ 下,*為必要的

具體功能如下:

(托管組件 MSM 處理所有托管組件的分發(fā),其中包括 Windows 窗體查看器、Web 窗體查看器和所有 Crystal Decisions 命名空間)

* Crystal_Managed2003.msm

Crystal_Managed2003_chs.msm

(對(duì)于使報(bào)表運(yùn)行所需的所有其他文件,由數(shù)據(jù)庫(kù)訪問(wèn) MSM 處理其分發(fā)。其中包括數(shù)據(jù)庫(kù)、導(dǎo)出和圖表驅(qū)動(dòng)程序。)

* Crystal_Database_access2003.msm

Crystal_Database_access2003_chs.msm

(KeyCode MSM 處理 Crystal Decisions 密鑰號(hào)碼的安裝,注意是添加合并模塊,否則沒(méi)有“MergeMouduleProperties”屬性)

* Crystal_regwiz2003.msm

(如果報(bào)表文件使用了 ADO.NET 的 dataset 數(shù)據(jù)集對(duì)象,那么 VC_User_CRT71_RTL_X86_---.msm 和 VC_User_STL71_RTL_X86_---.msm 模塊也必須包含在安裝工程中。而且這兩個(gè)模塊的文件安裝屬性的"Module Retargetable Folder"項(xiàng)必須修改成為系統(tǒng)目錄)

VC_User_CRT71_RTL_X86_---.msm VC_User_STL71_RTL_X86_---.msm

(很多人經(jīng)常出現(xiàn)查詢錯(cuò)誤,不妨加上這個(gè))

6.打開(kāi)解決方案--右鍵點(diǎn)擊Crystal_regwiz2003.msm的屬性,在“MergeMouduleProperties”里的“License Key”填入:AAP5GKS0000GDE100DS(這個(gè)是你生成Crystal Report是用到的注冊(cè)號(hào)的密碼?。?/p>

VB.NET安裝部署七).打包時(shí)加入卸載功能:

方法一:

1.在打包項(xiàng)目中添加文件msiexec.exe(一般可在c:/windows/system32/下找到)

2.在文件系統(tǒng)視圖中選擇應(yīng)用程序文件夾,在msiexec.exe上按右鍵,選擇創(chuàng)建快捷方式,重命名快捷方式為"卸載".

3.更改此快捷方式的Arguments 為"/x {產(chǎn)品id}",產(chǎn)品id的值為打包項(xiàng)目的ProductCode屬性值.

方法二:(推薦)

1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標(biāo)簽,不是右鍵中的屬性),下面要用到

2.用VS.net建立一個(gè)新的控制臺(tái)程序uninst.exe文件

'power by: landlordh

'for 2000,xp,2003

Module uninstall

Sub Main()

Dim myProcess As Process =

New Process

If System.Environment.OSVersion.

ToString.IndexOf("NT 5") Then

myProcess.Start("msiexec", "/X

{2B65D4A9-C146-4808-AB4B-321F

B0779559}") '改為自己的ProductCode

End If

myProcess.Close()

End Sub

End Module

3.將控制臺(tái)程序BIN目錄的exe文件加入到打包程序文件中,在程序組創(chuàng)建uninst.exe的快捷方式

VB.NET安裝部署八).打包時(shí)加入.net環(huán)境和MDAC功能:

把MS的PluginInstaller.msi插件裝上后,用vb.net的自帶的打包工具打包,就會(huì)自動(dòng)把.net framework環(huán)境打進(jìn)去,再下面的步驟進(jìn)行設(shè)置,就可以把MDAC也打包.使用 Setup 項(xiàng)目安裝 MDAC

1.確保 Visual Studio .NET 框架引導(dǎo)程序插件已安裝。

2.在 Solution Explorer 中選擇 Setup 項(xiàng)目。從 View 菜單指向 Editor,并選擇 Launch Conditions(啟動(dòng)條件)。

3.選擇 Requirements on Target Machine(搜索目標(biāo)計(jì)算機(jī)) 節(jié)點(diǎn)。從 Action 菜單,選擇 Add Registry Launch Condition(添加注冊(cè)表搜索)。

4.選擇 Search for RegistryEntry1 節(jié)點(diǎn)。在 Properties 窗口中,選擇 RegKey 屬性,并鍵入 Software/Microsoft/DataAccess。

5.選擇 Root 屬性,并選擇 vsdrrHKLM。

6.選擇 Value 屬性,并鍵入 FullInstallVer。

7.選擇 Property 屬性,并鍵入 MDACSEARCH。

8.在 Launch Conditions Editor(啟動(dòng)條件) 中,添加Condition1 節(jié)點(diǎn)。選擇 Condition1 節(jié)點(diǎn),在 Properties 窗口中,選擇 Condition 屬性,并選擇 MDACSEARCH="2.6"。

9.在 Solution Explorer 中選擇 Setup 項(xiàng)目。在 Project 菜單上,選擇 Properties。

10.將 Bootstrapper 屬性設(shè)置為 Windows Installer Bootstrapper(Windows 安裝引導(dǎo)程序)。

VB.NET 中的Of是什么意思

泛型參數(shù),表示一種特定類(lèi)型,通常用于集合List, Dictionary之類(lèi)的。

原型:Dictionary(Of TKey, TValue)

原型不能直接使用,必須給TKey, TValue指定一個(gè)類(lèi)型(Type)

強(qiáng)類(lèi)型字典:Dictionary(Of String, String)

表示鍵和值都為String類(lèi)型的字典。

程序最小化問(wèn)題!

用VB開(kāi)發(fā)托盤(pán)程序

[ 文章來(lái)源:不詳 | 轉(zhuǎn)載注明: | 更新時(shí)間:2006-1-25 ]

很多軟件運(yùn)行時(shí)會(huì)在系統(tǒng)托盤(pán)區(qū)(就是桌面右下角顯示時(shí)間的區(qū)域)出現(xiàn)一個(gè)小圖標(biāo),它作為程序運(yùn)行的一個(gè)標(biāo)志,我們可以通過(guò)使用小圖標(biāo)所彈出的菜單來(lái)控制應(yīng)用程序的狀態(tài)。本例就給出了一個(gè)功能比較完整的托盤(pán)程序,我們可以看到怎樣用API函數(shù)Shell_NotifyIcon來(lái)添加、刪除、更改托盤(pán)圖標(biāo);而且例中還演示了為托盤(pán)圖標(biāo)添加右鍵菜單和浮動(dòng)提示的方法。

程序(附后)用到了Shell_NotifyIcon、SendMessage、CallWindowProc、SetWindowLong等API函數(shù),其中Shell_NotifyIcon是主要的函數(shù),它用來(lái)添加、刪除、更改系統(tǒng)托盤(pán)區(qū)(taskbar status area)的圖標(biāo),所以我們先來(lái)看看這個(gè)函數(shù)的聲明和參數(shù):

使用API函數(shù)之前必須先在程序中聲明如下:

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

其中各參數(shù)的意義如下表:

參數(shù): 意義

dwMessage 為消息設(shè)置值,它可以是以下的幾個(gè)常數(shù)值:0、1、2

NIM_ADD = 0 加入圖標(biāo)到系統(tǒng)狀態(tài)欄中

NIM_MODIFY = 1 修改系統(tǒng)狀態(tài)欄中的圖標(biāo)

NIM_DELETE = 2 刪除系統(tǒng)狀態(tài)欄中的圖標(biāo)

LpData 用以傳入NOTIFYICONDATA數(shù)據(jù)結(jié)構(gòu)變量,其結(jié)構(gòu)如下所示:

Type NOTIFYICONDATA

cbSize As Long 需填入NOTIFYICONDATA數(shù)據(jù)結(jié)構(gòu)的長(zhǎng)度

HWnd As Long 設(shè)置成窗口的句柄

Uid As Long 為圖標(biāo)所設(shè)置的ID值

UFlags As Long 設(shè)置uCallbackMessage,hIcon,szTip是否有效

UCallbackMessage As Long 消息編號(hào)

HIcon As Long 顯示在狀態(tài)欄上的圖標(biāo)

SzTip As String * 64 提示信息

End Type

返回值 Long,非零表示成功,零表示失敗

在使用這個(gè)API函數(shù)之前我們應(yīng)該先定義結(jié)構(gòu)類(lèi)型NOTIFYICONDATA:

Public Type NOTIFYICONDATA

cbSize As Long HWnd As Long

Uid As Long UFlags As Long

UCallbackMessage As Long

HIcon As Long

SzTip As String * 64

End Type

然后定義一個(gè)NOTIFYICONDATA的變量TheData來(lái)記錄設(shè)置托盤(pán)圖標(biāo)的數(shù)據(jù)

Private TheData As NOTIFYICONDATA

這時(shí)我們就可以使用這個(gè)函數(shù)來(lái)設(shè)置系統(tǒng)托盤(pán)圖標(biāo)了,具體方法如下:

1、添加圖標(biāo)

With TheData

.Uid = 0

.HWnd = frm.HWnd 'frm.HWnd是程序主窗體的句柄

.cbSize = Len(TheData)

.HIcon = frm.Icon.Handle 'frm.Icon.Handle指向主窗體的圖標(biāo)

.UFlags = NIF_ICON

.UCallbackMessage = TRAY_CALLBACK

'作用是允許返回消息,在下一節(jié)中會(huì)有詳細(xì)解釋。

.UFlags = .UFlags Or NIF_MESSAGE

.cbSize = Len(TheData)

End With

Shell_NotifyIcon NIM_ADD, TheData

'根據(jù)前面定義NIM_ADD,設(shè)置為“添加模式”,然后添加

2、刪去圖標(biāo)

With TheData

.UFlags = 0

End With

Shell_NotifyIcon NIM_DELETE, TheData

'根據(jù)前面定義NIM_DELETE,設(shè)置為“刪除模式”

3、更改圖標(biāo)

With TheData

.HIcon = pic.Handle

'pic是圖片狂PictureBox,存放圖標(biāo)文件

.UFlags = NIF_ICON

End With

Shell_NotifyIcon NIM_MODIFY, TheData

'根據(jù)前面定義NIM_MODIFY,設(shè)置為“更改模式”

4、為圖標(biāo)添加浮動(dòng)提示信息

With TheData

.SzTip = tip vbNullChar

'tip是字符串string,存儲(chǔ)提示信息

.UFlags = NIF_TIP

'指明要對(duì)浮動(dòng)提示進(jìn)行設(shè)置

End With

Shell_NotifyIcon NIM_MODIFY, TheData

'根據(jù)前面定義NIM_MODIFY,設(shè)置為“修改模式”

通過(guò)以上幾段代碼我們就能根據(jù)自己需要添加、刪除、更改系統(tǒng)托盤(pán)圖標(biāo),并能添加系統(tǒng)圖標(biāo)上的浮動(dòng)提示信息。但這時(shí)的托盤(pán)圖標(biāo)是孤立的,我們并不能利用它來(lái)控制應(yīng)用程序的行為,怎么辦呢?別急,請(qǐng)往下看……

如果你下載(源程序下載)并運(yùn)行這個(gè)例程序,你會(huì)發(fā)現(xiàn)如果我們?cè)谕斜P(pán)圖標(biāo)上點(diǎn)擊鼠標(biāo)右鍵,則會(huì)彈出一個(gè)右鍵菜單。如果點(diǎn)擊相應(yīng)的菜單項(xiàng),程序主窗體會(huì)隨之變化,這樣就可以控制程序的行為。而如果當(dāng)主窗體處于最小化狀態(tài)時(shí),我們?cè)谕斜P(pán)圖標(biāo)上點(diǎn)擊左鍵,窗體會(huì)恢復(fù)到原來(lái)的大小。其實(shí)實(shí)現(xiàn)上述的功能都要依賴(lài)于WINDOWS操作系統(tǒng)的消息機(jī)制,要完全弄懂這個(gè)機(jī)制挺不容易的,但是我們可以按下述文字來(lái)理解它。

把WINDOWS操作系統(tǒng)看作人的大腦,它接收、處理、并發(fā)送各種各樣的信息給我們的各個(gè)器官(當(dāng)然是比喻各個(gè)應(yīng)用程序了),也就是說(shuō)它是消息的中樞。而每個(gè)應(yīng)用程序(甚至每一個(gè)按鈕、標(biāo)簽、窗體等等統(tǒng)稱(chēng)為窗口)在運(yùn)行時(shí)都會(huì)被分配一個(gè)窗口過(guò)程WINDOWPROC,由這個(gè)窗口過(guò)程來(lái)接收和處理操作系統(tǒng)發(fā)來(lái)的消息(實(shí)際上存在一個(gè)消息隊(duì)列),通常情況下這個(gè)窗口過(guò)程是由操作系統(tǒng)指定的,它會(huì)自動(dòng)的響應(yīng)并處理一些WINDOWS消息(如窗體移動(dòng)、最大化、最小化、錯(cuò)誤信息等)。好,到這我們先停一下,提出一個(gè)疑問(wèn),這些消息能否由我們自己寫(xiě)程序來(lái)處理呢?答案是肯定的,不過(guò)還得借助API函數(shù)的威力了,怎么用?我們還是先看看這些API函數(shù)的定義和參數(shù)吧。

程序中用到了SendMessage、CallWindowProc、SetWindowLong等API函數(shù),其中SendMessage函數(shù)的作用是將一條消息發(fā)給某個(gè)窗口;CallWindowProc函數(shù)用來(lái)發(fā)送消息到一個(gè)窗口過(guò)程;而使用SetWindowLong函數(shù)來(lái)為窗口結(jié)構(gòu)中為指定的窗口設(shè)置屬性。使用API函數(shù)之前必須先在程序中聲明如下:

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

其中各參數(shù)的意義如下表:

CallWindowProc函數(shù)

參數(shù) 意義

lpPrevWndFunc Long,原來(lái)的窗口過(guò)程地址

HWnd Long,窗口句柄

Msg Long,發(fā)送的消息

wParam Long,消息類(lèi)型,參考wParam參數(shù)表

lParam Long,依據(jù)wParam參數(shù)的不同而不同

返回值 Long,依據(jù)發(fā)送的消息不同而變化

SetWindowLong函數(shù) :

參數(shù) TD意義

hwnd Long,欲為其取得信息的窗口的句柄

nIndex Long,請(qǐng)參考GetWindowLong函數(shù)的nIndex參數(shù)的說(shuō)明

dwNewLong Long,由nIndex指定的窗口信息的新值

返回值 Long,指定數(shù)據(jù)的前一個(gè)值

SendMessage函數(shù) :

參數(shù) 意義

hwnd Long,要接收消息的那個(gè)窗口的句柄

wMsg Long,消息的標(biāo)識(shí)符

wParam Long,具體取決于消息

lParam Any,具體取決于消息

返回值 Long,由具體的消息決定

我們要自己寫(xiě)程序來(lái)處理消息,必須先更改窗口的屬性,從原來(lái)由默認(rèn)的窗口過(guò)程來(lái)處理消息變成由我們自己寫(xiě)的消息處理過(guò)程來(lái)處理消息。方法是使用SetWindowLong函數(shù)來(lái)取得默認(rèn)窗口過(guò)程的地址,然后轉(zhuǎn)向?yàn)槲覀冏约簩?xiě)的窗口過(guò)程的地址,具體的實(shí)現(xiàn)方法如下代碼:

'GWL_WNDPROC獲得該窗口的窗口過(guò)程的地址,AddressOf是取址函數(shù),NewWindowProc是我們寫(xiě)的過(guò)程

OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf

NewWindowProc)

然后在NewWindowProc函數(shù)中寫(xiě)入如下代碼,需要注意的是下面代碼中紅色的TRAY_CALLBACK是由托盤(pán)區(qū)圖標(biāo)傳來(lái)的消息,要讓托盤(pán)圖標(biāo)傳回消息,必須在添加托盤(pán)圖標(biāo)時(shí)指定:

Public Function NewWindowProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'如果用戶點(diǎn)擊了托盤(pán)中的圖標(biāo),則進(jìn)行判斷是點(diǎn)擊了左鍵還是右鍵

If Msg = TRAY_CALLBACK Then

'如果點(diǎn)擊了左鍵

If lParam = WM_LBUTTONUP Then

'而這時(shí)窗體的狀態(tài)是最小化時(shí)

If TheForm.WindowState = vbMinimized Then _

'恢復(fù)到最小化前的窗體狀態(tài)

TheForm.WindowState = TheForm.LastState

TheForm.SetFocus

Exit Function

End If

End If

'如果點(diǎn)擊了右鍵

If lParam = WM_RBUTTONUP Then

'則彈出右鍵菜單

TheForm.PopupMenu TheMenu

Exit Function

End If

End If

'如果是其他類(lèi)型的消息則傳遞給原有默認(rèn)的窗口函數(shù)

NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)

End Function

這樣我們就取得并處理了來(lái)自托盤(pán)圖標(biāo)的消息,現(xiàn)在的問(wèn)題是在鼠標(biāo)右鍵菜單彈出后,怎么控制程序主窗體的狀態(tài),這時(shí)我們需要用到SendMessage函數(shù)來(lái)向主窗體發(fā)送最大化、最小化、關(guān)閉、移動(dòng)等消息,具體的代碼實(shí)現(xiàn)如下,其中HWnd是主窗體的句柄,WM_SYSCOMMAND表示發(fā)送的是系統(tǒng)控制類(lèi)的消息,SC_MOVE、SC_SIZE、SC_RESTORE便是要發(fā)送的消息了:

'托盤(pán)圖標(biāo)右鍵菜單上的“移動(dòng)”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayMove_Click()

SendMessage HWnd, WM_SYSCOMMAND, SC_MOVE, 0

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“恢復(fù)”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayRestore_Click()

SendMessage HWnd, WM_SYSCOMMAND, SC_RESTORE, 0

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“退出”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTraySize_Click()

SendMessage HWnd, WM_SYSCOMMAND, SC_SIZE, 0

End Sub

最后要提醒你,在程序退出時(shí)一定要把窗口過(guò)程的地址恢復(fù)為默認(rèn)值,同時(shí)把托盤(pán)圖標(biāo)移去哦。

為了學(xué)習(xí)方便,以下提供了源代碼:

'---------------------------------------------

' 使用系統(tǒng)托盤(pán)程序演示

'---------------------------------------------

'程序說(shuō)明:

' 這是一個(gè)比較完整的使用系統(tǒng)托盤(pán)的程序?qū)嵗?,包?/p>

'了:添加托盤(pán)圖標(biāo),刪除托盤(pán)圖標(biāo),動(dòng)態(tài)改變托盤(pán)圖標(biāo),

'為托盤(pán)圖標(biāo)添加浮動(dòng)提示信息,實(shí)現(xiàn)托盤(pán)圖標(biāo)的鼠標(biāo)右鍵

'菜單等內(nèi)容。

'-------名稱(chēng)-------------------作用------------

' Form1 主窗體

' mnuFile,mnuFileExit 文件菜單,菜單項(xiàng)

' mnuTray,mnuTrayClose... 托盤(pán)區(qū)右鍵菜單,菜單項(xiàng)

'---------------------------------------------

Option Explicit

'LastState變量的作用是標(biāo)示主窗體原有狀態(tài)

Public LastState As Integer

'【VB聲明】

' Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'【說(shuō)明】

' 調(diào)用一個(gè)窗口的窗口函數(shù),將一條消息發(fā)給那個(gè)窗口。除非消息處理完畢,否則該函數(shù)不會(huì)返回。SendMessageBynum,

' SendMessageByString是該函數(shù)的“類(lèi)型安全”聲明形式

'【返回值】

' Long,由具體的消息決定

'【參數(shù)表】

' hwnd ----------- Long,要接收消息的那個(gè)窗口的句柄

' wMsg ----------- Long,消息的標(biāo)識(shí)符

' wParam --------- Long,具體取決于消息

' lParam --------- Any,具體取決于消息

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'表示發(fā)送的是系統(tǒng)命令

Private Const WM_SYSCOMMAND = H112

Private Const SC_MOVE = HF010

Private Const SC_RESTORE = HF120

Private Const SC_SIZE = HF000

'當(dāng)主窗體加載時(shí)

Private Sub Form_Load()

'窗體的WindowState屬性,返回或設(shè)置一個(gè)值,該值用來(lái)指定在運(yùn)行時(shí)窗體窗口的可視狀態(tài)

'vbNormal 0 (缺省值)正常 。

'VbMinimized 1 最小化(最小化為一個(gè)圖標(biāo))

'VbMaximized 2 最大化(擴(kuò)大到最大尺寸)

If WindowState = vbMinimized Then

LastState = vbNormal

Else

LastState = WindowState

End If

'將圖標(biāo)添加到托盤(pán)的函數(shù),參見(jiàn)模塊中的解釋

'注意了這是從主程序到模塊的入口,本例中并沒(méi)有直接調(diào)用Shell_NotifyIcon函數(shù)

AddToTray Me, mnuTray

SetTrayTip "托盤(pán)圖標(biāo)演示,點(diǎn)擊右鍵彈出菜單"

End Sub

'在主窗體Form1大小改變時(shí),相應(yīng)改變右鍵菜單mnuTray的菜單項(xiàng)的可用屬性Enabled

Private Sub Form_Resize()

Select Case WindowState

'如果窗體最小化了,把菜單項(xiàng)“最大化”“恢復(fù)”設(shè)為可用,

'而把“最小化”“移動(dòng)”“大小”三項(xiàng)設(shè)為不可用.

'如果這時(shí)在托盤(pán)圖標(biāo)上點(diǎn)擊鼠標(biāo)右鍵,會(huì)發(fā)現(xiàn)不可用項(xiàng)變?yōu)榛疑?/p>

Case vbMinimized

mnuTrayMaximize.Enabled = True

mnuTrayMinimize.Enabled = False

mnuTrayMove.Enabled = False

mnuTrayRestore.Enabled = True

mnuTraySize.Enabled = False

'窗體最大化時(shí)

Case vbMaximized

mnuTrayMaximize.Enabled = False

mnuTrayMinimize.Enabled = True

mnuTrayMove.Enabled = False

mnuTrayRestore.Enabled = True

mnuTraySize.Enabled = False

'一般狀態(tài)下

Case vbNormal

mnuTrayMaximize.Enabled = True

mnuTrayMinimize.Enabled = True

mnuTrayMove.Enabled = True

mnuTrayRestore.Enabled = False

mnuTraySize.Enabled = True

End Select

If WindowState vbMinimized Then LastState = WindowState

End Sub

'保證在程序退出時(shí)刪除托盤(pán)圖標(biāo)

Private Sub Form_Unload(Cancel As Integer)

RemoveFromTray

End Sub

'“文件”菜單的“退出”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuFileExit_Click()

Unload Me

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“退出”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayClose_Click()

Unload Me

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“最大化”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayMaximize_Click()

WindowState = vbMaximized

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“最小化”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayMinimize_Click()

WindowState = vbMinimized

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“移動(dòng)”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayMove_Click()

SendMessage HWnd, WM_SYSCOMMAND, _

SC_MOVE, 0

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“恢復(fù)”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTrayRestore_Click()

SendMessage HWnd, WM_SYSCOMMAND, _

SC_RESTORE, 0

End Sub

'托盤(pán)圖標(biāo)右鍵菜單上的“退出”項(xiàng)被點(diǎn)擊時(shí)

Private Sub mnuTraySize_Click()

SendMessage HWnd, WM_SYSCOMMAND, _

SC_SIZE, 0

End Sub

'-----------------------------------------

'以下為模塊中的代碼:

'-----------------------------------------

Option Explicit

Public OldWindowProc As Long

Public TheForm As Form

Public TheMenu As Menu

'【VB聲明】

'Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'【說(shuō)明】

' 此函數(shù)發(fā)送消息到一個(gè)窗口過(guò)程

'【返回值】

' Long,依據(jù)發(fā)送的消息不同而變化

'【參數(shù)表】

' lpPrevWndFunc----- Long,原來(lái)的窗口過(guò)程地址

' HWnd-------------- Long,窗口句柄

' Msg -------------- Long,發(fā)送的消息

' wParam ----------- Long,消息類(lèi)型,參考wParam參數(shù)表

' lParam ----------- Long,依據(jù)wParam參數(shù)的不同而不同

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'【VB聲明】

' Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'【說(shuō)明】

' 在窗口結(jié)構(gòu)中為指定的窗口設(shè)置信息

'【返回值】

' Long,指定數(shù)據(jù)的前一個(gè)值

'【參數(shù)表】

' hwnd ----------- Long,欲為其取得信息的窗口的句柄

' nIndex --------- Long,請(qǐng)參考GetWindowLong函數(shù)的nIndex參數(shù)的說(shuō)明

' dwNewLong ------ Long,由nIndex指定的窗口信息的新值

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'【VB聲明】

'Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

'【說(shuō)明】

'【參數(shù)表】

'參數(shù)dwMessage ---- 為消息設(shè)置值,它可以是以下的幾個(gè)常數(shù)值:0、1、2

'NIM_ADD = 0 加入圖標(biāo)到系統(tǒng)狀態(tài)欄中

'NIM_MODIFY = 1 修改系統(tǒng)狀態(tài)欄中的圖標(biāo)

'NIM_DELETE = 2 刪除系統(tǒng)狀態(tài)欄中的圖標(biāo)

'參數(shù)LpData ---- 用以傳入NOTIFYICONDATA數(shù)據(jù)結(jié)構(gòu)變量,我們也需要在"模塊"中定義其結(jié)構(gòu)如下:

'Type NOTIFYICONDATA

' cbSize As Long 需填入NOTIFYICONDATA數(shù)據(jù)結(jié)構(gòu)的長(zhǎng)度

' HWnd As Long 設(shè)置成窗口的句柄

' Uid As Long 為圖標(biāo)所設(shè)置的ID值

' UFlags As Long 用來(lái)設(shè)置以下三個(gè)參數(shù)uCallbackMessage、hIcon、szTip是否有效

' UCallbackMessage As Long 消息編號(hào)

' HIcon As Long 顯示在狀態(tài)欄上的圖標(biāo)

' SzTip As String * 64 提示信息

'End Type

'---- 其中參數(shù)uCallbackMessage、hIcon、szTip也應(yīng)在模塊中聲明為以下的常量:

'Public Const NIF_MESSAGE = 1

'Public Const NIF_ICON = 2

'Public Const NIF_TIP = 4

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Const WM_USER = H400

Public Const WM_LBUTTONUP = H202

Public Const WM_MBUTTONUP = H208

Public Const WM_RBUTTONUP = H205

Public Const TRAY_CALLBACK = (WM_USER + 1001)

Public Const GWL_WNDPROC = (-4)

Public Const GWL_USERDATA = (-21)

Public Const NIF_ICON = H2

Public Const NIF_TIP = H4

Public Const NIM_ADD = H0

Public Const NIF_MESSAGE = H1

Public Const NIM_MODIFY = H1

Public Const NIM_DELETE = H2

'記錄 設(shè)置托盤(pán)圖標(biāo)的數(shù)據(jù) 的數(shù)據(jù)類(lèi)型NOTIFYICONDATA

Public Type NOTIFYICONDATA

cbSize As Long

HWnd As Long

Uid As Long

UFlags As Long

UCallbackMessage As Long

HIcon As Long

SzTip As String * 64

End Type

'TheData變量記錄設(shè)置托盤(pán)圖標(biāo)的數(shù)據(jù)

Private TheData As NOTIFYICONDATA

' *********************************************

' 新的窗口過(guò)程--主程序中采用SetWindowLong函數(shù)改變了窗口函數(shù)的地址,消息轉(zhuǎn)向由NewWindowProc處理

' *********************************************

Public Function NewWindowProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'如果用戶點(diǎn)擊了托盤(pán)中的圖標(biāo),則進(jìn)行判斷是點(diǎn)擊了左鍵還是右鍵

If Msg = TRAY_CALLBACK Then

'如果點(diǎn)擊了左鍵

If lParam = WM_LBUTTONUP Then

'而這時(shí)窗體的狀態(tài)是最小化時(shí)

If TheForm.WindowState = vbMinimized Then _

'恢復(fù)到最小化前的窗體狀態(tài)

TheForm.WindowState = TheForm.LastState

TheForm.SetFocus

Exit Function

End If

End If

'如果點(diǎn)擊了右鍵

If lParam = WM_RBUTTONUP Then

'則彈出右鍵菜單

TheForm.PopupMenu TheMenu

Exit Function

End If

End If

'如果是其他類(lèi)型的消息則傳遞給原有默認(rèn)的窗口函數(shù)

NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)

End Function

' *********************************************

' 把主窗體的圖標(biāo)(Form1.icon屬性可改變)添加到托盤(pán)中

' *********************************************

Public Sub AddToTray(frm As Form, mnu As Menu)

'保存當(dāng)前窗體和菜單信息

Set TheForm = frm

Set TheMenu = mnu

'GWL_WNDPROC獲得該窗口的窗口函數(shù)的地址

OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf NewWindowProc)

'知識(shí)點(diǎn)滴:HWnd屬性

'返回窗體或控件的句柄。語(yǔ)法: object.HWnd

'說(shuō)明:Microsoft Windows 運(yùn)行環(huán)境,通過(guò)給應(yīng)用程序中的每個(gè)窗體和控件

'分配一個(gè)句柄(或 hWnd)來(lái)標(biāo)識(shí)它們。hWnd 屬性用于Windows API調(diào)用。

'將主窗體圖標(biāo)添加在托盤(pán)中

With TheData

.Uid = 0 '忘了嗎?參考一下前面內(nèi)容,Uid圖標(biāo)的序號(hào),做動(dòng)畫(huà)圖標(biāo)有用

.HWnd = frm.HWnd

.cbSize = Len(TheData)

.HIcon = frm.Icon.Handle

.UFlags = NIF_ICON '指明要對(duì)圖標(biāo)進(jìn)行設(shè)置

.UCallbackMessage = TRAY_CALLBACK

.UFlags = .UFlags Or NIF_MESSAGE '指明要設(shè)置圖標(biāo)或返回信息給主窗體,此句不能省去

.cbSize = Len(TheData) '為什么呢?我們需要在添加圖標(biāo)的同時(shí),讓其返回信息

End With '給主窗體,Or的意思是同時(shí)進(jìn)行設(shè)置和返回消息

Shell_NotifyIcon NIM_ADD, TheData '根據(jù)前面定義NIM_ADD,設(shè)置為“添加模式”

End Sub

' *********************************************

' 刪除系統(tǒng)托盤(pán)中的圖標(biāo)

' *********************************************

Public Sub RemoveFromTray()

'刪除托盤(pán)中的圖標(biāo)

With TheData

.UFlags = 0

End With

Shell_NotifyIcon NIM_DELETE, TheData '根據(jù)前面定義NIM_DELETE,設(shè)置為“刪除模式”

'恢復(fù)原有的設(shè)置

SetWindowLong TheForm.HWnd, GWL_WNDPROC, OldWindowProc

End Sub

' *********************************************

' 為托盤(pán)中的圖標(biāo)加上浮動(dòng)提示(也就是鼠標(biāo)移上去時(shí)出現(xiàn)的提示字條)

' *********************************************

Public Sub SetTrayTip(tip As String)

With TheData

.SzTip = tip vbNullChar

.UFlags = NIF_TIP '指明要對(duì)浮動(dòng)提示進(jìn)行設(shè)置

End With

Shell_NotifyIcon NIM_MODIFY, TheData '根據(jù)前面定義NIM_MODIFY,設(shè)置為“修改模式”

End Sub

' *********************************************

' 設(shè)置托盤(pán)的圖標(biāo)(在本例中沒(méi)有用到,如果要?jiǎng)討B(tài)改變托盤(pán)內(nèi)顯示的圖標(biāo),它非常有用)

' 例如:1、顯示動(dòng)畫(huà)圖標(biāo)(方法你一定猜到了,對(duì)!使用Timer控件,不斷調(diào)用此過(guò)程,注意把動(dòng)畫(huà)放在pic數(shù)組中)

' 2、程序處于不同狀態(tài)時(shí),顯示不同的圖標(biāo),方法是類(lèi)似的

' 有興趣的話試一試吧。

' *********************************************

Public Sub SetTrayIcon(pic As Picture)

'判斷一下pic中存放的是不是圖標(biāo)

If pic.Type vbPicTypeIcon Then Exit Sub

'更換圖標(biāo)為pic中存放的圖標(biāo)

With TheData

.HIcon = pic.Handle

.UFlags = NIF_ICON

End With

Shell_NotifyIcon NIM_MODIFY, TheData

End Sub

參考資料:

VB.net 和C#.net 各有什么優(yōu)缺點(diǎn)

C#.net優(yōu)點(diǎn):

運(yùn)算符重載。不安全代碼(指針和固定內(nèi)存區(qū))、?無(wú)符號(hào)整數(shù)、移位運(yùn)算。

VB的優(yōu)點(diǎn):?

即時(shí)編譯、靜態(tài)事件綁定、條件異常捕獲、COM兼容類(lèi)、寬松的類(lèi)型檢查和變量聲明、Visual Basic Runtime庫(kù)、可選參數(shù)、帶參數(shù)屬性、模塊等語(yǔ)言特征、動(dòng)態(tài)數(shù)組。

通過(guò)VB.NET開(kāi)發(fā)好的程序絕對(duì)沒(méi)有問(wèn)題(包括Direct X游戲開(kāi)發(fā))。雖然VB.NET的資料少,但是只要C#支持的VB.NET都支持(大體上這樣,因?yàn)槎家?jīng)過(guò)MSIL中間環(huán)節(jié)。除了指針之類(lèi)的VB.NET不支持C#支持,但是沒(méi)有多大實(shí)際用處)。

vb.net的資料以英文資料居多(只有英文資料才有看頭,中國(guó)的沒(méi)有什么好資料),得看看英文水平過(guò)不過(guò)關(guān)。還有VB.NET的ide也比C#的IDE好得多,代碼看得也舒服。(C#的大括號(hào){}太煩人)。

至于VB6對(duì)C的幫助,只是理解上會(huì)容易一些,其它用處不大。有VB6的基礎(chǔ)學(xué)VBNET會(huì)方便一些,但是并不是會(huì)VB6就會(huì)VB.NET,它們差別也不小。

擴(kuò)展資料:

NET、C#和ASP.NET之間的區(qū)別 :

1、NET是一個(gè)平臺(tái),一個(gè)抽象的平臺(tái)的概念。

NET 平臺(tái)其本身實(shí)現(xiàn)的方式其實(shí)還是庫(kù),抽象層面上來(lái)看是一個(gè)平臺(tái)。

基本可以理解的NET核心就是NETFramwork。

NETFramework包括兩個(gè)關(guān)鍵組成元素:

a. CommonLanguageRuntime,公共語(yǔ)言運(yùn)行時(shí)(CLR0)-提供內(nèi)在管理,代碼安全性檢測(cè)等功能。

b. NETFrameworkClassLibrary,.NET 框架類(lèi)庫(kù)(FLC)-提供大量應(yīng)用類(lèi)庫(kù),提高開(kāi)發(fā)效率。

學(xué)習(xí)NET Framework 是所有.NET開(kāi)發(fā)人員都必須的,否則開(kāi)發(fā)NET程序永遠(yuǎn)都是停留在‘外功’的招式,NETramework 是NET開(kāi)發(fā)高手的‘內(nèi)功’修行之一。

2、C#是一個(gè)程序設(shè)計(jì)語(yǔ)言,僅僅是一個(gè)語(yǔ)言。

程序設(shè)計(jì)語(yǔ)言僅僅是為了方便開(kāi)發(fā)人員和計(jì)算機(jī)溝通的工具,雖然 C#語(yǔ)法相對(duì) C 和?C+要多一些,但是相對(duì)來(lái)看 C#語(yǔ)法都比較固定,這樣使用起來(lái)卻都很容易。我認(rèn)可一位朋友說(shuō)的,C#的語(yǔ)法更嚴(yán)謹(jǐn)!

這里回過(guò)來(lái)看看NET和C#的關(guān)系,不得不提的是NET程序的執(zhí)行過(guò)程。

C#符合NETCLR 中的公共語(yǔ)言運(yùn)行規(guī)范。CLS:commonlanguagespecification,當(dāng)然所有的NET Language 都是符合這個(gè)規(guī)范的例如:VB.NET、XAML 和 C++/CL等等。

C#需要符合NETCLS,是因?yàn)镹ETCLR和JAVA虛擬機(jī)類(lèi)似,有一個(gè)中間語(yǔ)言共機(jī)器來(lái)執(zhí)行。所有不同語(yǔ)言的.NET代碼在執(zhí)行前會(huì)被編譯成同樣的中間語(yǔ)言(MSIL),所以所有NET 支持語(yǔ)言都必須符合符合CLS 規(guī)范。

P.S:如果做.NET3.0XAML開(kāi)發(fā)的朋友,可以嘗試下ildasm.exe看看XAML的應(yīng)用程序,會(huì)發(fā)現(xiàn)原來(lái) XAML其實(shí)很簡(jiǎn)單。

3、ASP.NET是一個(gè)網(wǎng)站開(kāi)發(fā)的技術(shù),僅僅是.NET框架中的一個(gè)應(yīng)用模型。

用微軟公司ASP.NET快速入門(mén)中的一句話來(lái)解釋?zhuān)珹SP.NET是用于生成基于Web的應(yīng)用程序的內(nèi)容豐富的編程框架。

ASP.net 和C#的區(qū)別:

編寫(xiě)asp.net通常包括兩部分的代碼:網(wǎng)頁(yè)層和后臺(tái)處理層,網(wǎng)頁(yè)就是用標(biāo)記語(yǔ)言來(lái)寫(xiě)的,而網(wǎng)頁(yè)對(duì)應(yīng)的后臺(tái)處理程序則需要.net語(yǔ)言來(lái)完成,目前主要是采用c#和vb.net。

可以說(shuō)整個(gè)的asp.net網(wǎng)站通過(guò)c#或者vb.net來(lái)實(shí)現(xiàn)。而c#則是ms .netframework的主要語(yǔ)言,可以用在網(wǎng)站,桌面應(yīng)用等方面??梢运闶且环N比較流行的編程語(yǔ)言。


新聞標(biāo)題:關(guān)于ofvb.net的信息
文章起源:http://www.xueling.net.cn/article/hihdio.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 精品自拍视频在线观看 | 大JI巴好深好爽又大又粗视频 | 麻豆人人妻人人妻人人片AV | 岛国午夜剧场 | www.久久av.com | 欧美一区二区观看视频 | 国产精品熟女高潮视频 | 国产伊人影院 | 柠檬福利视频导航 | 中文字幕久久久人伦 | 国产熟女精品视频国语 | 国产一区二区三区日韩 | www久久com | 亚洲午夜伦理 | 99热这里是精品 | 青青草成人影视 | 日韩伦理中文字幕 | www日本黄色 | 免费看黑人男阳茎进女阳道视频 | 国产小福利| 511yc影院免费理论片 | 91大神久久 | 日本人zzzwww色视频 | 色婷婷最新网址 | 国产精品人妻99一区二区三区 | 亚洲有无码av在线播放 | 一区二区三区免费网站 | 国产精品成人无码A片免费网址 | 久久私拍视频 | 另类专区成人 | 91人操人| 久久亚洲精品小早川怜子 | 永久免费观看美女裸体的网站 | 亚洲欧洲国产码专区在线观看 | 日本a视频在线播放 | 免费精品99久久国产综合精品 | 99riav国产在线观看 | 97av中文字幕 | 一区二区三区日本 | 国产三级精品三级在 | 99人精品福利在线观看 |