2012-11-20 52 views
1

我有以下(简化为使这易于阅读)如何从另一个类引用类变量在vb.net

第一类:

Class MainWindow 
    Private mFile As myFile 'myFile is a class containing a bunch of stuff 

    Sub go() 
      dim editFiles as New EditFiles(mFile) 
    End Sub 
End Class 

二等:

Public Class EditFiles 
    Private mFile As myFile 'myFile is a class containing a bunch of stuff 
Sub New(ByRef passedFile As myFile) 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 

    mFile = passedFile 

End Sub 

我想要发生的是我在第二类中对mFile所做的任何更改,以便也在第一个类中更改mFile,我认为通过在初始化中传递它ByRef,但是显然不会。

我在想什么是使这项工作适当的方法是什么?我知道我可以创建一个全局变量,但是必须有一种方法来从第一个类传递mFile的指针,以便第二个类中的mFile基本相同。

如果你可以通过编辑上面的代码给我看一个简单的例子,我会非常感激!

+0

从一流的,你不要实例“MYFILE”它传递给对象EditFiles“之前,所以它不会工作......这是一个简化的代码错误? – Minus

回答

0

这里是我结束了解决我的问题:

Class MainWindow 
Private mFile As myFile 'myFile is a class containing a bunch of stuff 

Sub go() 
     dim editFiles as New EditFiles(me, mFile) 
End Sub 

sub setMFile(_mfile as myfile) 
    me.mfile = _mfile 
End Class 

二等

Public Class EditFiles 
Private mainWindow As mainWindow 
Private mFile as myFile 
Sub New(ByVal sourceWindow As mainWindow, byVal sourceFile as myFile) 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    mainWindow = sourceWindow 
    mFile = sourceFile 

end Sub 
Sub setFile 
    mainWindow.setMFile(mFile) 
End Sub 
+0

是否有任何东西阻止您在创建EditFiles实例之前在MainWindow中初始化mFile?因为它会简单得多。 –

+0

嗯,这不是最好的解决方案,但它确实有效。我认为在第二课中创建一个公共财产会更好,我在第一课中提到要获得mfile。 – user1839684

0

您应该在第二个类中创建第一个类的对象。你也需要一个方法来改变第一个类中mFile的值。它应该像下面这样。

Class MainWindow 
    Private mFile As myFile 'myFile is a class containing a bunch of stuff 

    Sub go() 
      dim editFiles as New EditFiles(mFile) 

    End Sub 

    sub setMFile(_mfile as myfile) 
     me.mfile = _mfile 
End Class 

二等

Public Class EditFiles 
    Private mFile As myFile 'myFile is a class containing a bunch of stuff 
    Sub New(ByRef passedFile As myFile) 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 

    mFile = passedFile 
    dim newObject as new MainWindow 
    newobject.setMFile(mFile) 
End Sub 
+0

感谢这让我朝着正确的方向思考,当初始化它时,我最终将第一课程传递给了第二课程,然后在完成所有工作后,我可以将mFile设置为彼此相等并完成! – user1839684

+0

所以如果发现我的答案是正确的,请点击我答案旁边的复选标记。如果不是,那么请发布您自己的答案和一些示例代码,以帮助未来的这个职位的观众。 –

1

你需要确保主窗口的MFILE变量之前将它传递给EditFiles对象初始化

此外,如果myFile是一个类,你甚至不需要传递它ByRef。

相关问题