【问题标题】:vb.net calling a sub routine on a user controlvb.net 在用户控件上调用子例程
【发布时间】:2015-04-21 07:41:51
【问题描述】:

我在拆分容器中有一个 panel2,其中加载了多个用户控件。面板 1 有一个退出按钮,我想调用加载到面板 2 中的用户控件之一中的子例程之一。

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 上的退出按钮调用加载到 splitContainer.Panel2 中的名为 ucTimeTracker 的用户控件上的 autoWriteFileOnExit()

【问题讨论】:

  • 我使用了一个不漂亮的小技巧,但它确实有效。 UC中的Public SubProcs在外面是不可见的,但是公共属性是可见的。然后,我创建了一个公共 WriteOnly 属性,并通过它调用我的 proc。例如:Public WriteOnly Property CallGetFiltro() As Boolean Set(ByVal value As Boolean) If value = True Then Me.GetFiltro() Else 'Do Nothing End If End Set End Property

标签: vb.net user-controls


【解决方案1】:

您似乎使用的是用户控件类名称ucTimeTracker 而不是实例名称。在设计视图中单击用户控件,在属性视图中,有一个“名称”属性。改用 name 属性中的值(可能是ucTimeTracker1):

  ucTimeTracker1.autoWriteFileOnExit()

【讨论】:

  • 您应该建议他也将 Dim a 作为新的 ucTimeTracker 从他的代码中删除,因为它只会增加混乱。
【解决方案2】:

您正在使用ucTimeTracker 来引用方法,即类的名称。在该方法的前面,您创建了该类的实例 (Dim a As New ucTimeTracker),因此如果这是您要使用的实例,您应该调用 a. autoWriteFileOnExit()。如果 ucTimeTracker 是窗体上的控件,则应改为使用该控件的名称。

要理解这一点,您需要了解 static 成员和 instance 成员之间的区别。静态成员可以直接通过类访问,而不需要创建类的实例。为了使用实例成员,您首先需要一个类的实例。可以以 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()

通常静态方法不会作用于类中保存的数据(尽管并非总是如此),而是作用于通过参数传递给方法的数据。实例方法可以访问该特定实例的内部数据,并且可以对该数据进行操作(如上例所示)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2016-09-15
    • 2019-07-08
    • 2015-06-29
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多