我在一个拆分容器中有一个panel2,它有几个用户控件加载到它中。面板1有一个退出按钮,我想调用加载到Panel2中的一个用户控件中的一个子例程。
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
Dim dialogMessage As DialogResult
Dim a As New ucTimeTracker
dialogMessage = MessageBox.Show("Are you sure you want to exit?", "Exit Ready Office Assistant?", _
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
If dialogMessage = Windows.Forms.DialogResult.Yes Then
ucTimeTracker.autoWriteFileOnExit()
Me.Close()
Else
Return
End If
End Sub
这条线给我带来麻烦。
ucTimeTracker.autoWriteFileOnExit()
我收到了(引用非共享成员需要一个对象引用)。
我希望frmMain.SplitContainer.Panel1上的退出按钮在名为ucTimeTracker的用户控件上调用autoWriteFileOnExit(),该控件被加载到splitContainer.Panel2
答案 0 :(得分:1)
您似乎正在使用用户控件类名ucTimeTracker
而不是实例名称。在设计视图中单击用户控件,在属性视图中,有一个“名称”属性。请使用name属性中的值(可能是ucTimeTracker1
):
ucTimeTracker1.autoWriteFileOnExit()
答案 1 :(得分:0)
您正在使用ucTimeTracker
来引用该方法,该方法是类的名称。在该方法的前面,您创建了该类的实例(Dim a As New ucTimeTracker
),因此您应该调用a. autoWriteFileOnExit()
,如果这是您要使用的实例。如果ucTimeTracker是表单上的控件,则应该使用该控件的名称。
要理解这一点,您需要了解 static 成员和实例成员之间的区别。可以通过类直接访问静态成员,而无需创建类的实例。要使用实例成员,首先需要该类的实例。您可以查看Int32类作为示例:
' call a static method in the Int32 class, that returns an Int32 instance'
Dim asInt As Int32 = Int32.Parse("14")
' call an instance method on the Int32 instance, that will act on the data in '
' that instance, returning a string representation of its value '
Dim asString As String = asInt.ToString()
通常,静态方法不会对类中保存的数据起作用(尽管并非总是如此),而是作用于通过参数传递给方法的数据。实例方法可以访问该特定实例的内部数据,并可以对该数据进行操作(如上例所示)。