如何创建可用的表单实例?

时间:2015-12-18 18:06:31

标签: vb.net class instances

我尝试过制作表格的实例,但没有一个有效。

此代码有效并打开和关闭“灯”:

Public Class Lamp
    ' declare field
    Private lampColor As Color

    Public Sub New()
        ' initialize field
        lampColor = MainForm.lampShape.FillColor
    End Sub ' New

    Public Sub Switch()
        ' determine if lamp is on or off
        If lampColor = Color.Silver Then
            ' turn on lamp
            lampColor = Color.Yellow
        Else
            ' turn off lamp
            lampColor = Color.Silver
        End If

        ' display color on lamp
        MainForm.lampShape.FillColor = lampColor
    End Sub ' Switch
End Class

此代码不起作用:

Public Class Lamp
    ' declare fields
    Private lampColor As Color
    Private main As New MainForm

    Public Sub New()
        ' initialize field
        lampColor = main.lampShape.FillColor
    End Sub ' New

    Public Sub Switch()
        ' determine if lamp is on or off
        If lampColor = Color.Silver Then
            ' turn on lamp
            lampColor = Color.Yellow
        Else
            ' turn off lamp
            lampColor = Color.Silver
        End If
        ' display color on lamp
        main.lampShape.FillColor = lampColor
   End Sub ' Switch
End Class

我也尝试过很多其他项目,但都没有。

1 个答案:

答案 0 :(得分:2)

由于你的类永远不会显示它创建的主要内容,但是你说你可以看到“方形”没有改变颜色,你很可能有2个实例使用的形式:VB应用程序框架创建的实例{ {1}}表单,然后是您在Startup类中创建的表单。将Lamp添加到构造函数(sub New),我打赌你会看到第二种形式。

来自评论:

  

我这样做之后,现在打开了两个表格

关键字main.Show()会创建一个新对象。因此,虽然您的第二个类确实使用了表单实例,但它创建了自己的New,它与VB创建和显示的不同。

假设表单是应用程序的主要表单,并且表单创建了类,这就是你想要的:

New

然后当你创建它时:

Public Class Lamp
    Private lampColor As Color
    Private main As MainForm           ' no New!

    Public Sub New(frm As MainForm)
        main = frm                     ' store reference to the form passed

        lampColor = main.lampShape.FillColor
    End Sub ' New
    ...