注册 登录
编程论坛 VB.NET论坛

VB6转成VB2008

wube 发布于 2012-04-30 16:17, 2362 次点击
因为有人说.NET运行效能比VB6高出很多~跟C相距不远~所以想改写一支小程式来验证一下~

1.把字符串阵列当参数传递给其他函式使用要怎改?
Private Sub AAA()
Call BBB(B())
End Sub

Private Sub BBB(AA())
......
End Sub
会不会是跟VB6预设是ByRef~而.NET预设是ByVal有关呢?

2.VB6字符串阵列索引类型是根据变量型态定义来决定~而.NET预设是Integer~这又要怎改?

3.VB6的Form_QueryUnload事件在.NET里是对应哪个事件?选择性结束程序这部份要怎改写呢?
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If AAA = False Then
        MsgBox "Program implementation !!!"
        Cancel = True   '不关视窗
    Else
        Cancel = False  '关视窗
    End If
End Sub

4..NET无法像VB6一样把控件当对象传递给模块下的函式来操作的UI吗?

目前遇到这些问题~请.NET板上老师能指导一下~谢谢~
16 回复
#2
wube2012-04-30 23:28
抱歉~第一个的问题我已经自行解决~
剩下3个问题~在各位老师绞尽脑汁帮忙解决的同时~
我也不会闲着等答案~
#3
wube2012-04-30 23:43
第4项严格说也大概了解了~
只是.NET的类的概念实在好麻烦~
难道没有更简单的方法解决吗?
改到最后已经有点感觉像在写MFC了~

跟VB6好不一样~要动态新增控件类~
再拿控件类去做或修改用户界面上的数值设定~
从头到尾都是类类类~好烦~
#4
不说也罢2012-05-01 17:14
Form_QueryUnload————Form1_FormClosing(ByVal sender.....
#5
不说也罢2012-05-01 17:18
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click,Button2.Click,Button3.Click,Textbox2.GotFocus.......
#6
不说也罢2012-05-01 17:28
我也在学习中。菜单栏有一个“升级 Visual Bisic 6 代码”,必要的时候用一下,然后根据提示修改,也还不错。
#7
wube2012-05-02 00:12
以下是引用不说也罢在2012-5-1 17:18:09的发言:

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


上面这行让我想到一件事~
都说.NET已去除控件阵列功能~
所以意思是可以用这招直接解决要额外定义Control Group的东西吗?
#8
wube2012-05-02 00:16
以下是引用不说也罢在2012-5-1 17:28:37的发言:

我也在学习中。菜单栏有一个“升级 Visual Bisic 6 代码”,必要的时候用一下,然后根据提示修改,也还不错。


有阿~有用~
转换后也会自动把MSDN连结直接写到代码中~
或是提示你去点它~它再建议解决方法~
但是有时OK~有时不OK~更有时它也无解~

版主太谦虚了~我刚注册时你就已经在.NET区很久了~

[ 本帖最后由 wube 于 2012-5-2 00:33 编辑 ]
#9
wube2012-05-02 00:19
以下是引用不说也罢在2012-5-1 17:14:47的发言:

Form_QueryUnload————Form1_FormClosing(ByVal sender.....


这个我知道~我想问的是~当选择离开按钮后跳出提示框~
又选择不跳离程式时要怎么让程序~不继续到Close()~
#10
wube2012-05-02 00:25
以下是引用wube在2012-5-2 00:16:44的发言:

有阿~有用~
转换后也会自动把MSDN连结直接写到代码中~
或是提示你去点它~它再建议解决方法~
但是有时OK~有时不OK~更有时它也无解~


它还蛮贴心的~除了有整个工程转换的功能外~
还提供小工具让使用者能一小段一小段的转换代码~
但是VB6和概念实在相差太多~
常常连compile都无法完美解决~

就像VB6的Any型态(通常用在API参数声明)~在2008就无解了~
#11
wube2012-05-02 11:45
以下是引用不说也罢在2012-5-1 17:18:09的发言:

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


谢谢啰~试过结果果然如我料~
而且根据这行表示功能应用可以更广泛~
但是需要思考规划的更周全~
貌似代码要全改了~感觉又往前踏了一小步~
#12
不说也罢2012-05-02 12:19
以下是引用wube在2012-5-2 00:25:34的发言:

 
这个我知道~我想问的是~当选择离开按钮后跳出提示框~
又选择不跳离程式时要怎么让程序~不继续到Close()~
程序代码:
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If MsgBox("您确实要退出本程序吗?", MsgBoxStyle.OkCancel + MsgBoxStyle.Question) = MsgBoxResult.Cancel Then
            e.Cancel = True'就是它,可以让你的程序不执行Closed过程的代码
            Exit Sub
        End If
        MsgBox("您可以在这里继续写需要执行的Code")
    End Sub

#13
wube2012-05-02 19:48
以下是引用不说也罢在2012-5-2 12:19:06的发言:

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If MsgBox("您确实要退出本程序吗?", MsgBoxStyle.OkCancel + MsgBoxStyle.Question) = MsgBoxResult.Cancel Then
            e.Cancel = True'就是它,可以让你的程序不执行Closed过程的代码
            Exit Sub
        End If
        MsgBox("您可以在这里继续写需要执行的Code")
    End Sub


就是要这个~原来改成这样写~感谢了~
#14
wube2012-05-02 19:56
至于第4项也是难搞~
我知道.NET中Form已经包在里面了~
要用的时候再New一个就好~
只是我想要把原本已定义过的Form类~
以对象方式传递给其他自订函式调用~

不然有时很难做程序模组化~
代码太长看起来也很累人~
#15
wube2012-05-02 20:01
要先说声抱歉~不是我不自己百度~
而是网络上找到的大都是2005的资料~
而且都很局部的特例资料~
所以才来问一些很白痴很基本的问题~
#16
wube2012-05-02 22:26
以下是引用wube在2012-5-2 19:56:22的发言:

至于第4项也是难搞~
我知道.NET中Form已经包在里面了~
要用的时候再New一个就好~
只是我想要把原本已定义过的Form类~
以对象方式传递给其他自订函式调用~

不然有时很难做程序模组化~
代码太长看起来也很累人~


第4项算是找到答案了~不知到哪抓到的资料~类类类...累累累...

二.窗体之间的数据传输,
有时候我们想按下form1的BUTTON,改变form2的textbox.text。这在vb6中是很简单的,在写成form2.textbox.text=”xxxxx”的就行了,在vb7中却不能这样使用,这样有些麻烦,但却有利于封装性的产生。在大型的软件工程中,不至于因为类的相互紧密作用,导致调试的困难。例如一个窗体无法unload,我们无法确定是哪一个类的引用不当造成。
你可以写一个接口过程就像大部分丛vb6升级到vb7的软件那样。如:
Private Shared  m_vb6FormDefInstance As form1

Public Shared  Property DefInstance() As form1
    Get
    If m_vb6FormDefInstance Is Nothing Then
        m_vb6FormDefInstance = New form1()
    End If
    DefInstance = m_vb6FormDefInstance
    End Get
    Set
    m_vb6FormDefInstance = Value
    End Set
End Property

这样在form2中你可以写form1.DefInstance.xxxx调用属性。这大概算是一种兼容的方法
实际上你应该这样写
在class form1中: Inherits System.WinForms.Form 一行的后面public fm as new form2
然后你可以像在vb6中一样,使用fm.visible=true载入窗体并在form1中控制他。
但是你却不能这样在form2中控制form1我想vb7是将form1作为默认的主窗体
应该在form2中这样写:Public fmm as system.winforms.form=form1
虽然vb7声称这样写等同于Public fmm as form1
但这样你会不成功。因为fmm的值为Null,如果使用 New form1那你会看到每调用一次会出现一个新的form1!!L

[ 本帖最后由 wube 于 2012-5-2 22:30 编辑 ]
#17
wube2012-05-02 22:32
第二项就莫名其妙了~
不过算了就依它好了~
1