vb.net вызывает подпрограмму в пользовательском элементе управления - PullRequest
0 голосов
/ 30 мая 2009

У меня есть панель2 внутри разделенного контейнера, в которую загружено несколько пользовательских элементов управления. Панель 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 вызывала autoWriteFileOnExit () для пользовательского элемента управления с именем ucTimeTracker, который загружается в splitContainer.Panel2

Ответы [ 2 ]

1 голос
/ 30 мая 2009

Похоже, вы используете имя класса пользовательского элемента управления ucTimeTracker вместо имени экземпляра. Нажмите на пользовательский элемент управления в представлении конструктора и в представлении свойств есть свойство «Имя». используйте вместо этого значение в свойстве name (возможно, ucTimeTracker1):

  ucTimeTracker1.autoWriteFileOnExit()
0 голосов
/ 30 мая 2009

Вы используете ucTimeTracker для ссылки на метод, который является именем класса. Ранее в методе вы создавали экземпляр этого класса (Dim a As New ucTimeTracker), поэтому вам следует вместо этого вызывать a. autoWriteFileOnExit(), если вы хотите использовать этот экземпляр. Если ucTimeTracker является элементом управления в форме, вместо этого следует использовать имя этого элемента управления.

Чтобы понять это, вам необходимо понять разницу между статическими членами и экземпляром членами. Доступ к статическому члену можно получить напрямую через класс, без необходимости создавать экземпляр класса. Чтобы использовать экземпляр экземпляра, сначала вам понадобится экземпляр класса. Вы можете посмотреть на класс 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()

Обычно статические методы не воздействуют на данные, которые содержатся внутри класса (хотя это не всегда так), а скорее воздействуют на данные, передаваемые в методы через параметры. Методы экземпляра имеют доступ к внутренним данным этого конкретного экземпляра и могут воздействовать на эти данные (как в примере выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...