vb与vb.net的区别| 耗时:0.528秒|409503条结果

VB.NETC#.NET区别(转)

大家谈VB.NetC#.Net 我感觉C# 语法比VB好得多, 在速度上我没有做过测试,不过,我相信Aders能力,因为我们里曾经做过一个C#对Fotran测试,因为后者强在数学计算上,所以就做了个对数组操作测试 结果是C#比Fotran慢不了多少 1:语法 c#要好过VB.Net; 2
http://www.itnose.net/detail/481762.html 2014-01-23 17:07   [VB.Net]

VB.NET中IFIIF区别

        End If     End Function 如果我猜测没错活,那么IFIIF就有着本质上区别,根本不能互换,各位在使用过程中
http://www.itnose.net/detail/513407.html 2014-01-27 11:38   [VB.Net]

【转】C#vb.net区别

(modules), 可选参数, 参数属性(parameterized properties) 后台编译 C#VB.net间移植技巧 按理说,这两种语言没有什么移植必要,因为他们生成代码可以完全通用。但是如果一个工程基本上是VB写成,却需要少许已经存在C#过程,用组件并不是一种效率很高办法
http://www.itnose.net/detail/476628.html 2014-01-22 18:38   [VB.Net]

C#vb.net区别

,Variant 数据类型被 Object 代替2.VB6一致语法 三、2者区别?1.语法上差异        例如循环写法 VB.NET For I = 1 To 10   ‘ for loopNext
http://www.itnose.net/detail/476439.html 2014-01-22 18:37   [VB.Net]

VBVB.NET区别?

如题? vb.net只是多了个面向对象编程吗?vb中也有类概念啊? 请高手诠释.. 回复讨论(解决方案) vb.net多了三个字母 除了语法相似以外,VB6VB.NET没有什么共同点了 从功能上讲我认为vb.net 比 VB 没有多大
http://www.itnose.net/detail/793087.html 2014-02-21 13:50   [程序员]

菜鸟求指点 在VB.net 中 【结构】【类】区别;【属性】【方法】

菜鸟求指点 在VB.net 中 【结构】【类】区别;【属性】【方法】区别? 嗯!  【结构】【类】区别,不像VB6.0中,【结构】中也能定义【方法】!! 我晕 【属性】【方法】区别,属性竟然也能带参数? 那我还要
http://www.itnose.net/detail/6452037.html 2016-02-14 16:48   [VB.Net]

VBVB.NET大致区别【转载】

;      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)是类变量公共描述。Property…End Property语句用以创建property。属性Get/Set方法分别用于取得和设置属性值。下面例子中,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 Sealed 和 Virtual类 Visual Basic.NET提供了少理附加关键字,允许自己决定其它开发人员是否可以或者必须从自己类继承,或者他们不得不重写一些成员。 1. NotInheritable关键字    出于安全(或者其它)原因,要保证没有人能扩展自己创建类。简单地通过使用关键字NotInheritable标记该类就可以达到这个目: ‘确保所有类都不能从Employee类继承得到 NotInheritable Class Employee .... End Class 那此不能继承类又称Sealed类。 关字overridable不能用在密封类内部。 2.MustInherit 关键字 还有一种频繁发生善是想防止其它用户使用自己类,相反而是强制他们从该类继承。在这种情况下,该类称为virtual或者abstract类,因为仅能用它派生新类而不能直接实例化它。在Visual base 6中之最接近概念是创建来定义接口抽象类观念。 3.MustOverride 关键字 一般来说,虚拟类用户并不强制重写其属性和方法。毕竟,定义虚拟类主要好处在于派生类可以复用类中代码。然而,有时候会想要继承类提供一个给定方法自定义版本。     MustInherit Class Shape         MustOverride Sub Display()    End Class /////////////////////////////////////////////////////     Class Square        Inherits Shape         Public Side As Single         Public Overrides Sub Display()         End Sub    End Class /////////////////////////////////////////     类成员访问域除了原有Private和Public,VB.NET引入了几个新关键字。全部访问域关键字列表如下: 关键字 作用域 Private 限于class内部 Public 可以从class外访问 Friend 限于class所属应用程序内 Protected 只能被class和其派生类访问 Protected Friend 能被class、应用程序和派生类访问 继承继承是面向对象编程语言中最常用技术。继承让你能够重用类代码和功能。 VB.NET支持继承,而VB6.0则不支持。继承好处在于你能使用任何人编写类,从这些类派生自己类,然后在自己类中调用父类功能。在下面例子中,Class B派生自Class A,我们将从Class B中调用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     接口   接口是类所公开一组属性方法集合.接口只定义此类属性和方法(成员名称,各个参数个数和类型,以及返回值类型)签名,而类则能够通过为这些属性和方法提供必要实际代码以实现接口.如果保持每一种方法主义都保留不变,那么各种属性或方法代码可以在类和类之间有所不同.每个类都能够以不同方式实现相同属性或方法,这正是多态行为基础.   接口不能实例化,只能够被继承.       Interface IPluggableAddin        ReadOnly Property Id() As Long         Property State() As Boolean         Function OnConnection(ByVal environment As String) As Boolean         Sub OnDisconnection()     End Interface ////////////////////////////////////////////////////////////////////////     Class MyAddin        Implements IPluggableAddin         Public ReadOnly Property Id() As Long Implements IPluggableAddin.Id            Get             End Get        End Property         Public Function OnConnection(ByVal environment As String) As Boolean Implements IPluggableAddin.OnConnection         End Function         Public Sub OnDisconnection() Implements IPluggableAddin.OnDisconnection         End Sub         Public Property State() As Boolean Implements IPluggableAddin.State            Get             End Get            Set(ByVal Value As Boolean)             End Set        End Property    End Class     委托   1.第一个委托只可调用带有给定参数签名过程,参数签名是在委托声明当中指定;举个例子,给定委托只能指向带有传值Integer参数sub.这一限制命名委托比C函数内在更加安全,因为编译器能够检查出委托没有指向内存中任意过程或任意区字段.   2.和函数指针不同,委托既能够指向静态过程(例如在模块中声明过程或者是类中Shared方法)或实例过程.比较起来,C函数指针只能够调用静态过程.当调用实例过程时,就好像是在调用某种特殊方法或对象属性。因此在这一点上,委托行为和Visual Basic 6CallByName 函数更为相似,区别就是委托执行速度更快(它是早期绑定),更加健壮(运行时不能传递任意方法名称),也更安全(不能传递和被调用过程参数不一致参数)。   Delegate Sub OneArgSub(ByVal msg As String) ‘定义一个委托       Sub DisplayMsg(ByVal msgText As String)   '这是要委托函数        Debug.WriteLine(msgText)    End Sub //////////////////////////////////////////////////////////////////////////// Dim msg As OneArgSub = New OneArgSub(AddressOf DisplayMsg) ’调用委托 msg.Invoke("abc") '运行委托函数           可以通过class本身引用共享成员,而无需通过类实体。例如: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语言一大弱点就是缺乏编写自由线程(free-threaded)程序能力。在.NET Framework中,所有语言共享CRL(Common Runtime Library,公共运行库),也就是说,你可以用VB.NET、C#或其它.NET语言编写同样程序。 System.Threading namespace定义了线程类。我们只需要引入System.Threading namespace,即可使用线程类。 System.Threading.Thread类提供线程对象,可以使用Thread类创建或破坏线程。 创建线程使用Thread类实体创建一个新线程,然后用Thread.Start方法开始执行线程。线程构造器接受一个参数,该参数指明你要在线程中执行procedure。在下例中,我想在oThread1(Thread类一个实体)第二线程中执行SecondThread过程: 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 然后,调用Thread.Start()开始线程: oThread1.Start()   下面代码创建两个第二线程:   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 破坏线程 调用Abort方法来破坏(中止)一个线程。在调用Abort之前,确保用IsAlive判断线程处于活动状态。 If oThread1.IsAlive Then   oThread1.Abort() End If 暂停线程可以使用Sleep方法来暂停线程执行。Sleep方法接受一个以毫秒为单位参数,指明线程应当暂停多长时间。   下面例子让线程暂停1秒钟: oThread2.Sleep(1000)你也可以使用Suspend和Resume方法来挂起和继续线程执行。 设定线程优先级Thread类Priority属性用于设定线程优先级。该属性可以设置为Normal,AboveNormal,BelowNormal,Highest和Lowest。如: oThread2.Priority = ThreadPriority.Highest线程Apartment使用ApartmentState属性设置线程apartment类型,该属性值可以为STA,MTA或是Unknown[2]: oThread.ApartmentState = ApartmentState.MTAMTS意味着可以使用多线程模式,而STA则只能是单线程执行。 Public Enum ApartmentState { STA = 0, MTA = 1, Unknown = 2, } 1.8 结构化异常处理异常处理也被称之为错误处理。作为VB程序员,你一定对On Error Goto和On Error Resume Next这些VB6.0错误处理语句耳熟能详。这种类型错误处理被称为非结构化异常处理(Unstructured Exception Handling)。而在VB.NET中,Microsoft推出了结构化异常处理机制。VB.NET支持类似C++TryCatch..Finally控制。Try..Catch..Finally结构如下: Try ' 可能导致异常代码 Catch ' 当异常发生时处理异常代码 Finally ' 清理现场 End Try   Try语句块用以抛出异常。如果异常发生,在Catch语句块中处理。Finally语句块是可选,在需要释放资源时特别有用。 1.9 VB6.0VB.NET不同之处除了上面谈到语言进化,还有一些语法上变化。所有这些语言和语法变化在MSDN中均可查到,本文只作简单介绍。 数据类型(Data Type)改变VB.NET中有些数据类型得到改进。下面是变化对照表。   数据类型 VB6.0 VB.NET Integer 16 bit size 32 bit size Long 32 bit size 64 bit size Currency 用于存储大浮点数 被decimal替代,支持更高精度 Variant 可以存储任意类型数据 被Object类型替代,也可以存储任意类型数据,但结果更好 Date Date类型被存储为double 引入DateTime类型,用于存储不同格式日期 在VB.NET中,Short数据类型是16 bit。Short,Integer和Long都等同于CLRSystem.Int16、System.Int32和System.Int64类型。 变量声明变化在VB6.0中,变量声明有许多限制。其中之一就是不能同行声明多个变量。如果一定要在一行中声明多个变量,就一定得指明每个变量类型,否则将被默认为Variant类型。 Dim a1, a2 As Integer Dim a3 As Integer, a4 As Integer 第一行中a1是Variant类型,a2是Integer类型。第二行中两个变量都是Integer类型。VB.NET支持同行声明多个变量,举例如下: Dim a1, a2, a3 As Integer 变量初始化是另一个问题。在VB6.0中不能同时声明和初始化变量,而VB.NET则支持这个特性。 Dim name As String = "Mahesh"System.Console.Write(name) 声明常量也可以照此办理:Const DT_COUNT As Integer = 23 New关键字。在VB.NET中,New关键字用于创建对象。由于数据类型是对象,所以New关键字用以创建一个数据类型对象。 Dim i As Integer = New Integer()i = 10System.Console.WriteLine(i.ToString()) 代码块级别支持。像C++一样,VB.NET支持代码块级别作用域检查。在语句块中声明变量只在块内有效。 For i = 1 To 10Dim p As LongSystem.Console.WriteLine(i.ToString())NextSystem.Console.WriteLine(p.ToString()) 这段代码在VB.NET中会得到一个编译错误,因为p在For..Next语句块之外不可访问。在VB6.0中这段代码可以通过。 改进了类型安全 在VB6.0中,当你声明一个对外部过程引用时,可以指定任意类型参数为As Any。Any关键字禁止了类型检查,允许任意数据类型传入和返回。 VB.NET不支持Any关键字。你必须指定每个参数和返回值数据类型。数组VB.NET对数组作了明显改动。 数组范围。在VB.NET中,你需要格外留意数组范围问题。VB6.0默认数组下界为0,故数组中元素数量等数组上界值加一。下面数组界限从A(0)到A(10),共有11个元素: Dim A(10) As Single可以使用Option Base改变下界值为1。在VB.NET中,数组和C++一样,下界值为0,不支持Option Base。注意:MSDN文档指出数组只能包括与其尺寸相等元素数量,例如:Dim A(10) As Integer 只能包括10个元素(从A(0)到A(9)),但在编译下面这段代码时我发现它运行良好,看起来数组中容纳了11个元素。 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分别返回 010。ReDim和Fixed Array。你可以在VB6.0中指定固定长度数组。   Dim ArrWeekDays(0 To 6) As Integer  这里ArrWeekDays数组是固定长度,不能用ReDim语句改变长度。VB.NET不支持固定长度数组,所以ReDim总是有效。 可以用下面两种方式声明数组: Dim ArrWeekDays(6) As IntegerDim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6} ReDim语句。在VB6.0中,ReDim用于初始化动态数组。在VB.NET中你不能把它当作声明用。ReDim只能用于改变数组长度,不过不能改变数组维度。 Variant对阵ObjectVB6.0中Variant数据类型能存储任意类型变量,VB.NET中Object具备相同能力。 算术操作符VB.NET支持类似C++快捷方式。下面表格显示了常规操作快捷操作不同之处。快捷方式也可用于*、/、|、&等操作符。 操作符        常规语法     快捷方式加法           A = A+5    A +=5 减法         A = A ? 5  A -+ 5固定长度字符串 在VB6.0中,可以在声明字符串时指定其长度。VB.NET不支持固定长度字符串。 布尔操作符VB6.0中And、Or或是Xor语句是按位操作符。而在VB.NET中,它们是布尔操作符。执行这些操作将返回true或false。VB.NET引入新操作符来完成按位操作。 操作符           描述          BitAnd            按位AndBitOr              按位OrBitXor             按位XorBitNot             按位Not结构自定义类型在VB6.0中,你使用Type…End Type语句块创建结构或自定义类型。例如: Type StdRec  StdId As Integer  StdName As String End Type  VB.NET引入新语法:Structure。Type…End Type不再被支持。Structure…End StructureC++用法相同。可以指定结构中每个元素可访问域,如Public、Protected、Friend、Protected Friend、Private等。例如: Structure StdRec  Public StdId As Integer Public StdName As String  Private StdInternal As String End StructureVB.NETStructures就像类一样,也可以拥有方法和属性。New和Nothing关键字VB6.0中,AS New和Nothing关键字用于声明一个对象并初始化它。 VB.NET不支持隐式创建对象。如前所言,甚至连数据类型都是对象。你可以采用以下两种方法创建数据类型或对象: Dim i As Integer Dim i As Integer = New Integer() // Do something if i = Nothing Then End If 不支持Set语句VB6.0使用Set语句指派对象。例如:Set myObj = new MyObjectSet a = b在VB.NET中,不需要使用Set指派对象。例如:myObj = new MyObj()a = b过程(procedure)语法变化在VB.NET中过程语法有了很多变化。例如类似C++过程调用方式、ByVal(传值)为默认类型、Optional关键字、return语句等等。类似C++过程调用方式 VB6.0允许不用加圆括号调用过程(sub)。不过,用Call语句调用函数或sub时,一定要使用圆括号。例如:Dim I as IntegerCall EvaluateData(2, i) EvaluateData 2, i 在VB.NET中,所有方法调用都需要圆括号,而Call语句则是可选。 ByVal是默认参数类型在VB6.0中,在调用函数或sub时ByRef(传址)是默认类型。那意味着所有改变将反映到传入变量。VB.NET改变了这种方式。现在,默认参数类型是ByVal(传值)。 Optional关键字VB6.0使用Optional关键字可用来让用户决定传入一个默认值,之后在调用IsMissing函数判断
http://www.itnose.net/detail/481742.html 2014-01-23 17:07   [VB.Net]

【转】VB6和VB.NET区别

来源不详。 总览:     本文推荐给那些准备将自己应用移植到Visual Basic.NETVisual Basic开发者。文章中包括 Visual Basic.NET升级工具信息介绍以及将Visual Basic 6结构平滑升级到Visual Basic.NET 指导     在打开Visual Basic 6.0工程时Visual Basic.NET会自动升级,但是在绝大多数情况下你需要对在Visual Basic.NET下打开Visual Basic 6.0程序做一些改动。这篇文章用途就是时你对原来程序改动尽可能 少以及有效。 注:Visual Basic.NET仍然处于开发中,所以下面一些细节可能还会有改动,下面指导不保证在最终产品出 来后代码不需要改动。 什么是Visual Basic.NET?     Visual Basic.NET是下一代Visual Basic。而并不是简单在Visual Basic 6.0上在添加一些新特性而已, 微软重新设计了产品以便使开发者能够更加容易开发分布式应用,例如基于WEB程序以及多层系统。     Visual Basic.NET中有两种窗体包,Windows窗体以及Web窗体;一个新版ADO用于接受离线数据源;新语 言,移走了原来关键字,提高Type数据安全性以及提供低级别结构以满足高级别开发者需求。     这些新特性为Visual Basic开发者提供了新开发窗口:通过Web窗体以及ADO.NET,你可以快速开发可扩展 Web站点;通过继承,该语言实现了真正支持面向对象编程(object-oriented programming);Windows窗体 本身支持可视继承;现在展开程序就象拷贝可执行文件和控件到另一个目录那样简单。     Visual Basic.NET现在完全集成在其它Microsoft Visual Studio .NET语言中,不仅可以通过不同语言 开发组件,而且通过交叉语言继承,你可以从用一种语言编写类中派生用另一种语言编写类。 为什么Visual Basic.NET不提供100%继承性?     当在设计Visual Basic.NET时有两个方向:翻新以及完全新建。为了体供给用户尽可能多新特性(例如继 承以及线程),为了提供对新平台完全访问,以及为了使Visual Basic能够完全转移到下一代Web应用中。正 确选择是完全新建。     例如,很多在Windows窗体中新特性可以通过在现有代码中添加新控件以及属性来实现。但是这样就会牺 牲新Windows窗体很多内在特性,例如安全以及可视继承性。     一个重要目标是使Visual Basic代码可以完全集成到用其它语言编写代码中,例如Microsft C#(读C Sharp) 或者Visual C++。以及让Visual Basic开发者可以完全而且简单利用.NET框架功能,而不需要象原来那样使用 Windows API调用。所有Visual语言将与其它面向通用运行时语言(Common Language Runtime)语言使用相同 数据定义类型、数组、用户自定义数组、类以及界面。不过这样就要做一些牺牲,例如固定长度字符串以及以非 0数为下界数组将不再被支持。     Visual Basic现在已经成为一个真正面向对象语言,一些不一致特性,例如 GoSub/Return语句以及DefInt 已经从新语言中移走了。     这样结果是使Visual Basic更加具有活力,使其成为一种开发基于Windows应用最有效工具之一,同时 也是开发下一代Web站点最佳工具。 升级到Visual Basic.NET     Visual Basic.NET原则上可以使传统Windows开发者转移到建立下一代Web以及多层应用中。所以,你代码 需要升级以适应Visual Basic.NET     在你使用Visual Basic.NET打开Visual Basic 6.0工程后,通过自动升级工具可以一步步升级并建立一个新 基于Visual Basic.NET工程。这个升级是单向,既新Visual Basic.NET工程无法再在Visual Basic 6.0中 打开。     当工程升级后,Visual Basic.NET会修改语法改变以及将Visual Basic 6.0窗体转换为Windows窗体。在通 常情况下,你还需要手工做一些修改,因为自动升级工具不可能替你做所有事情。     为帮助改变原来代码,当你工程升级以后,Visual Basic.NET会在工程中添加“升级报告”列出所有问题, 同时在代码中添加注释提示你需要做改动,这些注释会以“TO DO”列表形式列出在任务列表窗口中,所以你可 以很容易需要改变部分,要想浏览相关代码只需要双击任务列表中相关项就可以了。每一个任务以及升级 报告中列表项都有相关在线帮助标题以给你更多帮助。 让Visual Basic 6.0和Visual Basic.NET同时工作     Visual Basic.NET支持升级Visual Basic 6.0生成工程,如果你工程是在VB 1-5下编写,你需要首先升 级道Visual Basic 6.0工程,编译、保存后再升级到Visual Basic.NET。     Visual Basic.NET和Visual Basic 6.0可以安装在同一系统下并可以同时运行。同样,利用较早版本或者其 它语言编写COM组件也可以集成到Visual Basic.NET中。例如你可以拖-放一个Visual Basic 6.0编写ActiveX 控件到Visual Basic.NETWindows窗体中,在Visual Basic.NET类中使用Visual Basic 6.0COM组件。     Visual Basic.NET编译组件同Visual Basic 6.0编译组件有一点点不同,Visual Basic.NET对象是通过 垃圾收集方式释放,所以在对象被删除到对象真正被从内存中释放之间或许会有一定延迟。     另外,Visual Basic.NET提供了Visual Basic.NET组件同Visual Basic 6.0之间二进制兼容性。现在展开一 个组件变比以往更加容易,配置一个组件文件只需要简单拷贝文件到目录就可以了(不需要regsvr32)。将组 件升级到新版本之需要以新文件覆盖就文件就可以了。你所要做只是确定新组件类同方法同旧组件兼容。 结构介绍     .NET平台提升了上一个版本平台结构,对于应用可伸缩性和分布特性提供了更好支持。例如离线数据访 问、基于HTTP消息传递文件配置。要获得以上特性,你需要使用Visual Basic.NET。 基于浏览器应用 Visual Basic 6.0和Visual Studio 6提供了以下技术用于建立基于浏览器Internet和Intranet应用: Webclasses DHTML projects ActiveX documents Active Server Pages (ASP)     Visual Basic.NET中引入了ASP.NET,ASP.NET是增强版ASP,并加入到了Web窗体(Web Forms)结构中,Web 窗体是.NET架构中非常重要一个组成部分。一个Web窗体包含两个部分:HTML文件和源程序文件。HTML文件用于 描述页面;源程序文件用于响应、控制页面事件。建立一个Web窗体同现在建立一个VisualBasic窗体一样简单。 它WYSIWYG 界面设计方式同现在Visual Basic是一样。下面图片演示了一个Web窗体设计:     Web窗体运行于服务器上,产生基于HTML3.2标准HTML页面发送到客户端。这一点同ASP相同,但是由于Web程 序是编译执行,同解释执行ASP比较起来速度要快很多。     下面是对将Visual Basic 6.0开发基于浏览器应用无缝转移到Visual Basic.NET一些介绍以及结构方 面建议。     我们建议你使用微软多层构架来开发你应用,利用ASP来开发界面,同时使用Visual Basic 6.0或者Visual C++ 6.0开发COM组件,Visual Basic.NET完全支持ASP,你可以同时使用ASP、ASP.NET、Web窗体来扩展你应用。 同时Visual Basic 6.0或者VC6商用组件可以不经升级获修改直接在Visual Basic.NET中使用。     包含DHTML页面以及客户端DLLDHTML 应用不能自动升级到Visual Basic.NET。我们建议你在Visual Basic 6.0下开发这些应用。同DHTML工程一样,ActiveX Documents不被Visual Basic.NET支持。不能自动升级。我们建 议:或者在Visual Basic 6.0下开发ActiveX Documents或者将ActiveX Documents转换为用户自定义控件。不过 ActiveX documents 和 DHTML应用程序可以集成到Visual Basic.NET技术中。     Web类(Webclasses)在Visual Basic.NET中将不再存在。Web类应用将升级到ASP.NET;不过,在自动升级后 你还需要做一些更改。现存Web类应用可以集成到Visual Basic.NETWeb窗体和ASP应用中,但是在新工程中, 我们建议在新工程中使用ASPWindows DNA平台。关于更多关于Windows DNA信息,请访问微软DNA站点: http://msdn.microsoft.com/isapi/gomscom.as...sp?Target=/dna/ 客户/服务器工程 Visual Basic 6.0提供以下技术用于建立客户端/服务器应用: Visual Basic窗体 Microsoft Transaction Server (MTS)/COM+中间层对象 用户控件     Visual Basic.NET提供了新窗体包:Windows窗体。相对于Visual Basic 6.0窗体,Windows窗体使用不同 对象模块,不过绝大部分是兼容。当你工程升级时,Visual Basic窗体自动升级到Windows窗体。下面是 Windows窗体示例:     对于开发中间层MTS and COM+ 服务器组件,Visual Basic.NET提供了更强大支持。使用统一调试器, 你可以从 客户端到MTS/COM+组件再到客户端进行步进调试。同时集成调试器也支持在MTS 和 COM+ 组件内部进行 调试(组件需要以native code方式编译,包含符号调试信息以及不进行优化)。     Visual Basic.NET同样也提供了新中间层组件:Web Services(Web服务器)。Web服务器包含在ASP.NET中, 其结构如下图所示:     通过使用HTTP传递允许方法请求可以通过防火墙传递。数据传递使用基于工业标准XML,允许其它语言以 及平台访问它们功能。尽管不再支持MTS事务,但是你还是有理由将你应用升级到Web Server,如果你不仅需 要分布式事务处理而且需要跨平台操作。通过Visual Basic.NET你可以通过简单拖-放操作来完成。     当你工程升级后,用户控件会升级到Windows控件;然而,自定义属性标记设置以及加速键设定不会升级。 单层应用 Visual Basic 6.0支持建立以下类型单层应用程序: 单层数据库应用程序 Visual Basic插件 普通应用程序以及游戏。     单层数据库程序代表就是使用Visual Basic访问微软Access数据库。这些应用可以有限制升级到Visual Basic.NET     现在Visual Basic.NET集成开发环境(IDE)已经完全集成为Visual Studio.NET IDE一部分,Visual Basic.NET 包含新中性语言(language-neutral)扩展模块Visual Basic.NET插件现在就等同于Visual Studio.NET add-ins,你可以利用Visual Studio.NET任何语言来开发插件。例如,你可以编写一个Visual Basic.NET插件 来绘制Visual C#窗体颜色或者为VB类添加注释。为了支持这些新功能,Visual Basic.NET已经不再支持旧 扩展模块,你需要更改原来程序中扩展对象。     很多程序被规于应用程序(Utility programs)。应用程序需要操作文件、设置注册表。对此,Visual Basic.NET 也提供了新特性。例如意外句柄可以捕捉文件系统错误,使用注册表类可以勇于操控注册表。需要注意是,一些 依赖于系统性能特征(performance characteristics)程序,例如游戏需要做改进,因为Visual Basic.NET提 供了新系统性能特征,对于Visual Basic.NET游戏开发,你可以使用微软DirectX7,或者使用新GDI:GDI+, GDI+包含了很多新特性,对简单2-D游戏提供了Alpha混合、反锯齿支持以及更多图像文件格式支持。 数据库操作 Visual Basic 6.0提供了以下类型数据库访问方式: ActiveX Data Objects (ADO) Remote Data Objects (RDO) Data Access Objects (DAO)     Visual Basic.NET包含了增强版ADO,称之为ADO.NET。ADO.NET目标是操作离线数据。同时对于ADO分布 应用提供了更强大支持。ADO.NET提供了绑定数据库到Windows窗体控件和Web窗体。     通过做一些小更改,DAO,RDO,ADO仍然可以在Visual Basic.NET中使用。然而,Visual Basic.NET不支持DAO 和RDO数据库到控件、数据库控件或者RDO用户连接绑定。我们建议在应用中包含DAO和RDO应用或者仍然使用 Visual Basic 6.0开发或者再升级到Visual Basic.NET前将它们更改为ADO数据绑定。 语言方面改进     我们在很多编程论坛或者新闻组中可以看到C++拥护者将VB称为一个玩具语言(Toy Language)。其中VB最 被人诟病是它不真正支持面向对象编程(oop)。 在新Visual Basic中,这些都将成为过去。Visual Basic.NET将真正支持oop。继承(inheritance)、多态 (polymorphism)以及重载(overloading)。当然还不止这些。包括一些新数据结构、结构性错误控制(Error Handing)以及线程。这些都将被新VB所支持。 继承     假设你编写了一个只包含一个函数名称为BaseClass基本类:         Function GetCustomerName()     ' Do some stuff     End Function     如果你想建立一个新类,并使用BaseClass中GetCustomerName函数。但有不想重写一编代码。那么通过继承, 你可以这样编写新类:     Inherits BaseClass     Function GetCustomerID()     ' Do some stuff     End Function 重载     重载就是建立两个具有同样你名称但是参数属性不同函数过程。假设有GetCustomID函数根据输入输出用 户ID号码。那么该函数可能有以下两种类型: Function GetCustomerID(custname as string) As Integer ' 通过用户名获得用户ID End Function Function GetCustomerID(purch as long) As Integer ' 根据购物单号码获得用户ID End Function 通过重载,你就可以根据不同类型输入调用同一个函数。 实际上现在VB在某种程度上提供了重载功能,考虑下面函数: Function GetCustomID(vIN As Variant) As Long     GetCustomID = vIN End Function 你可以以下面两种方式调用 ID = GetCustomID("123") 或者 ID = GetCustomID(123)     那么为什么还要在新版本中引进重载呢?这是因为新Visual Basic引进了新特性:类型安全(default type safety)。在Visual Basic.NET中,Variant类型将不复存在,详细介绍看下面关于升级部分内容。 多态     多态是在一个类中重新定义一个函数过程。例如你需要建立一个基于BaseClass类子类,但是又需要重新 编写GetCustomerName函数,在新版VB中,你就可以这样写: Inherits BaseClass Function GetOrders() Overrides Function GetOrders() ... End Function 线程     新Visual Basic语言结构部分将包含建立多线程,一个线程建立范例如下: set t = New Thread(New Threadstart                   (AddressOf(BaseClass.Function1))     从上面范例还可以看到,Visual Basic.NETAddressOf函数将真正返回函数指针。这在进行API调用, 例如回调函数方面将是很有帮助。 错误处理(Error Handling)     Visual Basic.NET另外一个大改进就是错误处理。Visual Basic将提供try…catch…finally结构,就象 Delphi中那样(微软原文是:just like those "respectable" languages :-))。例如: Sub SafeWrite() Try   Open "Testfile"   ...   Write #1 Catch    Kill "Testfile" Finally    Close #1 End Try End Sub 升级     当代码升级后,Visual Basic.NET会建立一个新升级工程。下面通过几个例子来说明你代码做了那些升级 Variant类型到Object类型     以前版本Visual Basic支持Variant数据类型,该类型可以设定为除了固定程度字符串外任何原始数据类 型和Empty,Error,Nothing和Null。在Visual Basic.NET中,Object数据类型可以设定为任何原始数据类型和Empty, Error,Nothing,Null和对象指针。当你工程升级到Visual Basic.NET后,任何Variant定义都会改变为Object。 同样,当你在编辑器中插入代码时,Variant关键字也会被替换为Object。 Integer数据类型到Short数据类型     在Visual Basic 6.0中,16bit数现在称为Short。32bit数称为Integer(64bit数称为Long)。当工程升级后, 数据定义会做如下改动: Dim x As Integer dim y as Long 更改为: Dim x As Short dim y as Integer 属性语法     Visual Basic.NET对于自定义属性语法作乐更加直观更改,将Get和Set合而为一。例如原来属性如下: Property Get MyProperty() As Integer     m_MyProperty = MyProperty End Property Property Let MyProperty(NewValue As Integer)     m_MyProperty = NewValue End Property 升级后更改为: Property MyProperty() As Short     Get         m_MyProperty = MyProperty     End Get     Set         m_MyProperty = Value     End Set    End Property VB窗体到Windows窗体     Visual Basic.NET包含新窗体包,Windows窗体,Windows窗体包含内含菜单编辑器。你VB窗体会升级到 Windows窗体。 界面 在先前版本中,公用类界面对于用户总是隐藏。在Visual Basic.NET中,公用类可以在代码窗口中浏览和编辑。 升级报告及注释     当工程升级后,升级报告会添加到你工程中,详细列出所有升级后你所需要对代码做更改。同时代码中 会加入注释提示你注意任何潜在问题。这些注释自动出现在Visual Basic.NET任务列表中。 编程介绍 使用先前绑定     Visual Basic 6.0和Visual Basic.NET都支持对象延迟绑定,该方法事先定义一个变量为Object数据类型, 然后在运行时将其设定为一个类。然而,在升级过程中,当访问延迟绑定对象缺省属性时可能会产生错误。例 如假设工程中包含Form1,Form1中有一个Label对象,名称为Label1,下面Visual Basic 6.0代码将Label标题 设定 为"SomeText" Dim o As Object Set o = Me.Label1 o.Caption = "SomeText"     在Visual Basic.NETWindows窗体中,Label控件Caption属性被称为Text属性。当你代码升级后,所有 实例中Caption属性都会转换为Text属性,但是延迟绑定对象是无类型(type-less)VB无法检测到对象 类型并做更改,在这种情况下,你需要手工对代码做改动。当你使用先前绑定对象时,对象可以自动升级,如下: Dim o As Label Set o = Me.Label1 o.Caption = "SomeText"     所以在程序中你需要将对象定义为适当对象类型而不是简单定义为Object对象类型。     同Visual C++类似。Visual Basic.NET支持函数重载,例如下面一个函数具有两个形态     Environ( Expression As Integer) As String     Environ( Expression As String ) As String     Visual Basic.NET会自动检测该使用那个参数函数。如果你传递一个正数值到Environ(),那么正数调用版 本会被调用;如果传递一个字符串,String版本会被调用。如果传递Object或者Variant数据类型到一个重载函数 将产生运行时错误。如果要想产生正确结果就需要通过数据类型强制转换,例如: Dim a As String Dim v As Variant v = "Path" a = Environ(CStr(v))   '正确     对于延迟绑定对象使用强制类型转换是一个很好编程习惯。这就使得代码可读性更好,同时也可以非常轻 松移植到Visual Basic.NET使用Date存储日期/时间较早版本VB支持使用Double数据类型来存储和改变时间。 在Visual Basic.NET中,这个特性将不再支持,因为在计算机内部日期并不是以Double方式存储,例如下面代 码可以在Visual Basic 6.0中运行,但是在Visual Basic.NET中会产生错误。 Dim dbl As Double Dim dat As Date dat = Now dbl = dat      '错误,不能将一个Date变量赋予一个Double变量 dbl = DateAdd("d", 1, dbl)   '错误,Double变量不能用于日期函数 dat = CDate(dbl)   '错误 CDate函数不能将Double变量转换到Date     .NET架构提供了ToOADateFromOADate函数用于在double变量以及Date变量之间转换。然而这需要在升级后手 工修改,所以在存储日期时应该使用Date数据类型。 缺省属性     在Visual Basic 6.0中,许多对象都有缺省属性,缺省属性在代码中可以省略。例如: MsgBox Form1.Text1.Text 可以这样编写: MsgBox Form1.Text1   缺省属性在代码编译是决定。同样,你也可以在延迟绑定对象中使用缺省属性,例如: Dim obj As Object Set obj = Form1.Text1 MsgBox obj 对于延迟绑定对象,缺省属性在程序运行时决定。     Visual Basic.NET不支持缺省属性,当你工程升级后,Visual Basic.NET会自动决定缺省属性,但是对于延 迟绑定对象无法自动解决决定缺省属性问题。在这种情况下,你需要自己来修改代码。更加复杂是,很多库 是通过 _Default属性来实现缺省属性。_Default象是一个代理,它将调用传递给真正缺省属性。所以当你 工程升级后,一些属性会被更改为 _Default。代码还是象往常那样工作,只是代码不如原来实际属性易读。 Dim obj As Object Set obj = Me.Text1 MsgBox obj   '不好代码,使用缺省属性 MsgBox Me.Text1   '不好代码,使用缺省属性 use: Dim obj As Object Set obj = Me.Text1 MsgBox obj.Text   '好代码,写出了属性 MsgBox Me.Text1.Text   '好代码,写出了属性     虽然缺省属性不被Visual Basic.NET支持,但是带参数缺省属性是被支持,要了解它们之间区别,下面 是范例: Dim rs As ADODB.Recordset rs("CompanyName") = "SomeCompany" rs!CompanyName = "SomeCompany" 实际上等于: Dim rs As ADODB.Recordset rs.Fields("CompanyName").Value = "SomeCompany" rs.Fields!CompanyName.Value = "SomeCompany" 因为Value是Fields缺省属性 对于第二种写法,Visual Basic.NET是支持;然而第一种情况不被支持,那么正确用法如下: Dim rs As ADODB.Recordset rs("CompanyName").Value = "SomeCompany" rs!CompanyName.Value = "SomeCompany"     象上面范例和其它大多数情况可以在工程升级时解决,但是你还是要避免在Visual Basic 6.0中在Object 和Variant数据类型使用缺省属性。因为升级程序无法发现并解决这些错误。 对Boolean类型数据使用AND/OR/NOT操作     And和Or关键字在Visual Basic.NET和Visual Basic 6.0中使用是不同,在Visual Basic 6.0中,AND运算 既执行逻辑AND操作也执行逐位AND操作,取决于操作数(如果是Boolean类型,执行逻辑AND操作,如果是数字,执 行逐位AND操作)。在Visual Basic.NET中,AND运算只执行逻辑AND操作。对于逐位操作,在Visual Basic.NET提供 了一组操作:BitAnd, BitOr, BitNot以及BitXor 。 下面是演示这些差异范例程序 Dim a As Integer Dim b As Integer Dim c As Boolean a = 1 b = 2 c = a And b MsgBox ("The answer is " & c)     当上面代码在Visual Basic 6.0下运行时,结果是False(执行逐位AND操作);然而在Visual Basic.NET下, 结果是True(执行逻辑AND操作)。     要确定你程序在升级后也运行结果同升级前一样,Visual Basic.NET包含了兼容函数VB6.And, VB6.Or以及 VB6.Not,这些函数执行结果同Visual Basic 6.0下AND/OR/NOT操作执行结果是一样。当代码升级后,结 果会象下面这样: Dim a As Short Dim b As Short Dim c As Boolean a = 1 b = 2 c = VB6.And(a, b) MsgBox ("The answer is " & c) 升级后代码会得出False结果,同Visual Basic 6.0下运行一样     如果不想你代码升级后使用兼容函数,就需要确保你AND/OR/NOT都使用在Boolean类型数据操作中,例 如,如果上面代码更改为下面方式: Dim a As Integer Dim b As Integer Dim c As Boolean a = 1 b = 2 c = a <> 0 And b <> 0 MsgBox ("The answer is " & c) 当升级后,代码同原来几乎一样: Dim a As Short Dim b As Short Dim c As Boolean a = 1 b = 2 c = a <> 0 And b <> 0 MsgBox ("The answer is " & c)     同前面不同是每一个操作都是在Boolean数据之间进行,因此它们在Visual Basic 6.0中使用都是逻辑 AND操作。所以在升级到Visual Basic.NET后不会发生改变。这样做意义是你可以直接在Visual Basic.NET和 Visual Basic 6.0之间拷贝和粘贴代码,你代码会运行更快因为使用是本地AND操作而不是兼容函数。     另外一个需要考虑问题是对于函数结果AND/OR/NOT 操作问题,例如下面范例: Dim b As Boolean b = Function1() And Function2()     在Visual Basic 6.0中,Function1和Function2结果都会执行后再将结果进行AND操作。在Visual Basic.NET 中,只有当Function1结果为True时才会计算Function2。因为Visual Basic.NETAND运算执行是逻辑AND操 作,如果Function1结果为False,AND结果肯定是False,为了加快速度就不再执行Function2了。但是如果 Function2另有目,例如用于避免某些错误,那么就会出现不可预知错误,那么上面代码升级后就会象下面 样子: Dim b As Boolean b = VB6.AND(Function1(), Function2()) 为了不在升级代码中出现兼容函数,原来代码需要做如下改动: Dim b As Boolean Dim c As Boolean Dim d As Boolean c = Function1() d = Function2() b = c And d     另一个需要注意是在Visual Basic.NET中,True值将不再是-1而是1。做这个改变是为了使Visual Basic.NET 能集成在 .NET语言中。因为有这个改变,你需要再你Visual Basic 6.0工程中使用常量True而不是-1来表示真 值,使用Boolean类型而不是整数类型变量保存Boolean数据。下面代码说明了Visual Basic 6.0和Visual Basic.NET 之间不同: Dim i As Integer i = True If i = -1 Then     MsgBox ("True") Else     MsgBox ("False") End If 在Visual Basic 6.0中,结果为True,而在Visual Basic.NET中结果为False。 如果对代码做如下改动,程序在两种语言下运行都会显示True Dim i As Boolean i = True If i = True Then     MsgBox ("True") Else     MsgBox ("False") End If 通过上面范例可以看出在程序中需要注意两点: 1、使用常量True和False来判断是否而不要使用0和-1 2、使用Boolean类型变量储存Boolean数值而不要使用Integer类型变量 如果在你程序中没有这么做话,在升级后你还需要做大量手工改动 避免Null传播(Propagation)     先前版本VB支持Null传播。Null传播前提是null值使用在表达式中,表达式结果将是Null,例如下面 范例,结果V都将是Null Dim V V = 1 + Null V = Null + Right$("SomeText", 1) V = Right("SomeText", 0)     Null传播在Visual Basic.NET中将不再被支持。象上面语句1+Null会产生一个类型错误。另外在Visual Basic 6.0中有两个求左值函数:Left和Left$前者返回值为Variant类型并且可以为空,Left$函数返回值为String 类型。在Visual Basic.NET中,只有一个Left函数,该函数总是返回String类型值     为了使程序兼容Visual Basic 6.0以及Visual Basic.NET,你需要在代码中加入对Null检测代码,在Visual Basic.NET中,下面函数将不再返回Null值: Chr Mid Command Oct CurDir Right Date RTrim Environ Space Error Str Hex Time LCase Trim LTrim UCase 由于数据库中数据可以包含Null值,所以你需要在程序中对获得数据加入代码检测其值是否为Null。 使用以0为下界数组     Visual Basic 6.0允许你使用任何整数数字作为一个数组上界和下界。同样你也可以通过ReDim将一个Variant 重新定义为数组。为了能够同.NET平台下其它语言协同工作,Visual Basic.NET数组必须以0作为下界,而且只 有一个变量事先定义为数组后才可以使用ReDim函数重新定义。虽然这样限制了数组定义灵活性,但是这样可以 在Visual Basic.NET和.NET其它语言之间传递数组。下面范例说明了新定义数组约束: Dim a(1 To 10) As Integer   '错误:下界必须为0 Dim v ReDim v(10)   '错误,在没有定义v为数组前不能使用ReDim Dim b(10) As Integer   '正确 ReDim b(5) As Integer   '正确     另外,在Visual Basic 6.0中, Dim (0 to 10) As Integer定义了包含11各整数数组,索引从0到10。同样 定义在Visual Basic.NET下建立一个包含10个整数数组,索引从0到9。     基于上面改变,Option Base 0|1已经从Visual Basic.NET中删除了。     当你代码升级到Visual Basic.NET后,以0为下界数组不会改变。如果数组下界非0话,数组会升级到一 个兼容类,如下: Dim a(1 To 10) As Integer 改变为: Dim a As Object = New VB6.Array(GetType(Short), 1,10)     兼容数组类比本地数组操作起来要慢很多,同时在程序中使用它也有限制。例如你不能将一个兼容数组类作为 参数传递到一个以数组作为参数函数,你也不能传递一个兼容类到Visual C#或者Visual C++类中。     基于以上原因,你需要在你Visual Basic 6.0代码中使用以0为下界数组,避免使用ReDim定义数组,避免 使用Option Base 1语句。 使用VB常量而不要使用它们所代表值 在写代码时候,尽量使用VB常量而不要使用它们所代表值。例如你要在运行时将一个窗口最大化,使用: Me.WindowState = vbMaximized   'Good: Constant name 而不要使用: Me.WindowStyle = 2   'Bad: Underlying value Me.WindowStyle = X   'Bad: Variable     在Visual Basic.NET中,一些属性和常量数值发生了改变;例如True值由-1变为了1。在你代码升级到 Visual Basic.NET后,大部分常量会自动更改;然而如果你使用是常量代表数值而不是常量名,那么你就要 做大量手工更改工作。 用户自定义数据类型中数组和固定长度字符串     为了使Visual Basic.NET数组和数据结构完全兼容Visual Studio.NET,固定长度字符串在新语言中不再被支 持。在大多数情况下者不是问题,因为Visual Basic.NET提供了兼容固定长度字符串定义类,那么代码: Dim MyFixedLengthString As String * 100 升级后会变成这样: Dim MyFixedLengthString As New VB6.FixedLengthString(100)     然而,在数据结构(例如用户自定义数据)中使用固定长度字符串类可能产生错误。因为在用户自定义数据结 构建立时类不会被建立。用户自定义数据中固定长度数组也会产生同样问题。     当你代码升级后,在代码中用户自定义数据类型中如果有固定长度数组和字符串话,在定义位置会添 加注释提醒你在使用用户自定义数据类型前首先对字符串或者数组进行初始化。然而,你可以在你Visual Basic 6.0用户自定义类型中将固定长度字符串定义改变为字符串定义,将固定长度数组定义改变为未初始化数组来 避免升级产生后产生上面问题。例如: Private Type MyType     MyArray(5) As Integer     MyFixedString As String * 100 End Type Sub Bar()     Dim MyVariable As MyType End Sub 升级后会变为: Private Type MyType     MyArray() As Integer     MyFixedString As String End Type Sub Bar()     Dim MyVariable As MyType     ReDim MyVariable.MyArray(5) As Integer     MyVariable.MyFixedString = String$(100, " ") End Sub   Avoid Legacy Features 避免使用从原始Basic继承特性,如下关键字在新版本语言中将不再出现: Def Computed GoTo/GoSub GoSub/Return Option Base 0|1 VarPtr, ObjPtr, StrPtr LSet Windows APIs     大多数API调用可以象在Visual Basic 6.0中一样使用,因为数据类型发生了改变。在Visual Basic 6.0中 Long类型在Visual Basic.NET中定义为Integer类型。在升级过程中这些定义会自动改变,例如: Private Declare Function GetVersion Lib "kernel32" () As Long Function GetVer()     Dim Ver As Long     Ver = GetVersion()     MsgBox ("System Version is " & Ver) End Function 改变为: Private Declare Function GetVersion Lib "kernel32" () As Integer        Function GetVer()     Dim Ver As Integer     Ver = GetVersion()     MsgBox("System Version is " & Ver) End Function     除了数字类型升级外,Visual Basic 6.0还支持固定长度字符串类型,该类型升级到Visual Basic.NET后 会定义为固定长度字符串兼容类。 所以在Visual Basic 6.0代码中最好使用通用字符串定义,例如: Private Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long Function GetUser()     Dim Ret As Long     Dim UserName As String     Dim Buffer As String * 25     Ret = GetUserName(Buffer, 25)     UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)     MsgBox (UserName) End Function 上面代码出现了固定长度字符串,最好更改为:     Dim Buffer As String     Buffer = String$(25, " ") 升级到Visual Basic.NET后会称为下面样子: Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer Function GetUser()     Dim Ret As Integer     Dim UserName As String     Dim Buffer As String     Buffer = New String(CChar(" "), 25)     Ret = GetUserName(Buffer, 25)     UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)     MsgBox(UserName) End Function     在有些情况下,Visual Basic.NET能够更好控制传递字符串到API调用,因为你可以通过ANSI 和UNICODE 关键字定义字符串传递方式。 有三种情况需要对代码最手工改进。 1、在传递给API函数自定义数据类型定义中包含固定长度字符串和数组。在Visual Basic.NET中你需要对自定 义数据类型定义中每一个固定长度 字符串和数组添加MarshallAs 属性。 2、在定义中使用As Any声明。该种声明不再被Visual Basic.NET支持,变量定义为As Any通常是为了传递一个既 可能是字符串也可能是Null变量,在Visual Basic.NET中,你可以定义两个不同类型API,一个为Long类型, 一个为String类型,以API函数GetPrivateProfileString 为例: Private Declare Function GetPrivateProfileString Lib "kernel32" Alias    "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal       lpKeyName As Any, ByVal lpDefault As String, ByVal          lpReturnedString As String, ByVal nSize As Long, ByVal             lpFileName As String) As Long 你可以删除As Any而代之以定义两个不同函数;一个接受Long数值,一个接收String树脂: Private Declare Function GetPrivateProfileStringKey Lib "kernel32" Alias    "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal       lpKeyName As String, ByVal lpDefault As String, ByVal          lpReturnedString As String, ByVal nSize As Long, ByVal             lpFileName As String) As Long Private Declare Function GetPrivateProfileStringNullKey Lib "kernel32"    Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,       ByVal lpKeyName As Long, ByVal lpDefault As String, ByVal          lpReturnedString As String, ByVal nSize As Long, ByVal             lpFileName As String) As Long 当你希望传递Null数值时,使用GetPrivateProfileStringNullKey。 3、如果你程序中有诸如建立线程、Windows子类(subclassing),消息钩子等API调用时,这些函数在 Visual Basic.NET下可能会产生运行时错误。很多这些API在Visual Basic.NET或者.NET架构中有等价函数。 窗体控件     Visual Basic.NET包含了一个新窗体包:Windows窗体。Windows窗体Visual Basic 6.0窗体间保持了最 大兼容性;然而,还是有一些需要提出关键差异:     Windows窗体不支持OLE container控件;你需要在Visual Basic 6.0应用中避免使用该控件。     在Windows窗体中没有Shape控件。矩形和圆角形状控件会升级为Label控件,椭圆和圆形无法升级。你需要在 Visual Basic 6.0应用中避免使用该控件。     在Windows窗体中没有Line控件。横线条和竖线条控件会升级为Label控件,斜线条无法升级。你需要在Visual Basic 6.0应用中避免使用该控件。     Windows窗体提供了新图形命令取代Circle, CLS, PSet, Line以及Point。因为新对象模块同Visual Basic 6.0是不同,这些方法无法被升级     对于Timer控件,将Interval属性设置为0不能使Timer控件停止运行而是将时间间隔设定为1。所以在Visual Basic 6.0中,需要通过设置Enabled属性为False而不是将Interval属性设置为0来停止Timer运行。     Windows窗体包含两种菜单控件,MainMenu(窗口菜单)和ContenxtMenu(弹出菜单)。而Visual Basic 6.0只包 含一种菜单控件:Menu。Menu可以以窗口菜单方式也可以以弹出菜单方式打开。工程升级后Menu会升级到MainMenu。 但是你不能以弹出方式打开MainMenu;你需要手工建立弹出菜单。 Windows窗体不支持动态数据交换(DDE)。 Windows窗体不支持Form.PrintForm方法     虽然Windows窗体在功能上支持拖-放但是对象模块同Visual Basic 6.0有很大不同,所以Visual Basic 6.0 中拖-放属性以及方法无法升级。     .NET架构对Clipboard对象进行了升级,对剪贴版操作比Visual Basic 6.0Clipboard对象提供了更多函 数和支持。因为对象模块不同,Clipboard声明无法自动升级     Windows窗体不支持在运行时对窗体和控件Name属性进行访问,这样你就不能通过Name属性访问控件集合中 控件(这个功能在.NetSystem.Reflection类中提供)     为了保证你窗体在升级后保持正确尺寸,你要确保在程序中将缺省缩放比例(ScaleMode)设定为Twips。 当升级后,Visual Basic.NET将度量单位从Twips转换为pixels     上面就是关于Visual Basic.NET说明,从上面介绍可以看到,相对于以前版本,这一次Visual Basic 可以说是有了重大革新(而且似乎有一些方面在向Delphi看齐)。它提供了以前版本从来没有面向对对象编程, 强大错误处理,同VC++ C Sharp更紧密集成。但是也牺牲了很多原来Basic一直都有特性。不过总来看,还是 值得升级到Visual Basic.NET。如果最终版本能够实现他们所说那样,我会给Visual Basic.NET打4颗星。
http://www.itnose.net/detail/476758.html 2014-01-22 18:38   [VB.Net]

vb.net trim 和vb trim 区别

只能去掉头尾空格 VB.NETtrim能去掉头尾空白字符 http://hi.baidu.com/redtramp/item/cfc4c4c37aa9782def46652e 我一直以为没区别的 VBTrim只能去空格。 VB.NET可以去指定字符,比如'\0'
http://www.itnose.net/detail/93493.html 2013-12-31-18:10   [VB.Net]

vb.net面向对像 ReadOnly可读属性只读属性区别

;string) _name=value end set ------------------------------------------------ 有什么区别(ReadOnly) 回复讨论(解决方案) 第1种写法能通过编译吗? 确实不能通过编译,必须得成对出现
http://www.itnose.net/detail/183495.html 2014-01-01-12:45   [VB.Net]

C++.NETC#编码区别 ,vb.netc#语法比较

本文只讨论C ++ .NETC#编码区别,其理论区别请参考相关书籍. 1. 命名空间引用方法     C#        通过 命名空间后跟"."来引用
http://www.itnose.net/detail/501045.html 2014-01-25 14:15   [VB.Net]

菜鸟问题vbvb.net有何区别

vbvb.net有什么区别?如果要做一个销售系统,应该学哪一种才比较好,哪一个容易入手,哪一个实现功能比较强? 回复讨论(解决方案) vb是一门语言 vb.net是在.net框架支持下用vb语言编写应用程序 vb已过时,强大当然是vb.net。 平台不同  vb
http://www.itnose.net/detail/725236.html 2014-02-20 00:44   [VB.Net]

VB刚转VB.NET请教】VB.NET MDI子窗体问题

现在刚从VB6转学VB.NET2005,首先遇到MDI问题,大家帮个忙! 1、从MDI中调用子窗体,查网上资料,在MID打开子窗体指令中赋值myChidfrm.ParentForm =me,可是出现错误提示:属性“ParentForm”为“ReadOnly” 2、VB.NET
http://www.itnose.net/detail/381218.html 2014-01-03-15:38   [VB.Net]

CS vb.net

vb.net里可用别参数或方法替代? 回复讨论(解决方案) Dim reader As OleDbDataReader reader = cmd.ExecuteReader Dim newFactory 
http://www.itnose.net/detail/341178.html 2014-01-03-11:41   [VB.Net]

  1  2  3  4  5 下一页>