从过去到未来、 从Visual和Basic到Net。(从VB到VB.NET的12个技巧)(三)

来源:互联网 发布:android studio mac版 编辑:程序博客网 时间:2024/05/01 21:28

从过去到未来、 VisualBasicNet(三

10.    运行时动态的创建控件。VBNET不再象VB6那样直接支持控件数组了,用VBNET会有不同的实现办法和需要更多的代码,VBNET的实现机制有些象Java的实现了。一直很怀疑MS是否把以前VJ中的WFC直接搬到VSNET中。

过去的VB

======================================================

Private Sub cmdAddButton_Click(Index As Integer)

      Static counter As Integer

      counter = counter + 1

      If counter < 4 Then

         Load cmdAddButton(counter)

         With cmdAddButton(counter - 1)

            cmdAddButton(counter).Move _

               .Left + .Width + _

               (10 * Screen.TwipsPerPixelX), .Top

         End With

         cmdAddButton(counter).Visible = True

      End If

   End Sub

 

现在的VB.NET

======================================================

 (第一种实现)

   Private Sub btnAddButton_Click(ByVal sender As _

      System.Object, ByVal e As System.EventArgs) _

      Handles btnAddButton.Click

  

      Static counter As Integer = 1

      Static lastButton As System.Windows.Forms.Button

      counter += 1

      If lastButton Is Nothing Then

         lastButton = btnAddButton

      End If

      If counter < 4 Then

         Dim b As New System.Windows.Forms.Button()

         With lastButton

            b.Width = .Width

            b.Text = .Text

            Controls.Add(b)

            b.Left = .Left + .Width + 10

            b.Top = .Top

            lastButton = b

         End With

      AddHandler b.Click, AddressOf  Me.btnAddButton_Click

      End If

   End Sub

 

( 第二种实现)

      Private Sub btnNewAdd_Click(ByVal sender As _

      System.Object, ByVal e As System.EventArgs) _

      Handles btnNewAdd.Click

  

      Dim b As New System.Windows.Forms.Button()

      With sender

         b.Width = .width

         b.Text = "Click Me!"

         Controls.Add(b)

         b.Left = .Left + .Width + 10

         b.Top = .Top

      End With

      AddHandler b.Click, AddressOf Me.newButtonClick

   End Sub

 

使用GetChildIndex来获得控件数组中的控件。

Private Sub newButtonClick(ByVal sender As _

      System.Object, ByVal e As System.EventArgs)

      MsgBox("A new button was clicked! The index of " _

         " this button is: " & Me.Controls.GetChildIndex _

         (sender))

End Sub

 

11.   变量和数组的定义。

VB6的变量定义是很神奇的,开始用VB时,我一直以为 Dim X , Y as String 是一样的。等知道不同时也不喜欢用 Dim X as String , Y as String 来定义、宁愿分两行定义。现在的VBNET中在同一语句中定义的变量必须是同种类型,也就是说Dim X as Integer , Y as String 已不在允许了。最让我满意的是VBNET开始支持这样的语法: dim x As integer = 24 ,等了它许多年了。数组的定义,特别是初始化也改进了不少,现在可以在定义的同时赋值进行初始化,省去定义一个循环变量和做一个For循环,而且数组的下标是基于零了,突然数组只可以是基于零的下标,这下所有数组都由零开始了。

过去的VB

======================================================

Dim X as Integer

X = 100

 

Dim MyArray( 10 ) as Integer ( 实际有11个元素)

For i = 0 To 10

           MyArray ( I ) = I

Next

 

Dim MyArray1( 10 ) as Integer

Dim MyArray2(10) as Integer

For i = 0 To 10

           MyArray 1( I ) = I

Next

For i = 0 To 10

           MyArray 2( I ) = MyArray1( I )

Next

 

现在的VB.NET

======================================================

Dim X as Integer = 100

 

Dim MyArray ( 10 ) as Integer = ( 0,1, 2, 3, 4, 5, 6, 7,8 , 9 ) (10个元素)

 

Dim MyArray1(10) as Integer = ( 0,1, 2, 3, 4, 5, 6, 7,8 , 9 )

Dim MyArray2(10) as Integer = MyArray1

 

12.   开始支持结构化的错误处理,引进了新的Try Catch Finally 语句而且也有了Throw 表达式,这样在多层的错误处理中你可以少写许多On Error GoTo 不要再费心GoTo的满天飞了。VBNET仍然也支持原来非机构的错误处理语句比如有趣的 On Error GoTo 0 On Error resume Next 等等。不过一个函数中同时存在结构和非结构的错误处理代码时看起来一定非常有趣。就象新版帝国2中的农民一样,代码防御力增加Double

 

总的来说VB.NET比以前的VB要简洁和更少的代码,但也需要你了解更多的对象和对象的方法。不能说VBNETVB好或不好,有时我想把VBVBNET看做根本是两种不同的语言,也许会更实际一点,这样我们就不会妄想目前的VB程序进行小小的修改就可以在dotnet的平台上运行了。

 

虽然目前所有正在运行的应用都不可能简单的升级到dotNet,不过这并不妨碍你多学习一门语言,接受一种变化;事实上无论VB如何发展,对于你来说掌握和适应Visual Studio.NET都将是一个曲线的演变,不管是现在还是未来。