2009-05-30 5 views
0

J'ai un panneau2 à l'intérieur d'un conteneur divisé dans lequel plusieurs commandes utilisateur sont chargées. Panneau 1 a un bouton de sortie et je veux appeler l'un des sous-routines qui est dans l'un des contrôles de l'utilisateur chargé dans Panel2.vb.net appel d'une sous-routine sur un contrôle utilisateur

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 

Cette ligne me cause des problèmes. Je reçois (la référence au membre non partagé nécessite une référence d'objet).

Je veux que le bouton de sortie sur frmMain.SplitContainer.Panel1 pour appeler autoWriteFileOnExit() sur le contrôle de l'utilisateur nommé ucTimeTracker qui est chargé dans splitContainer.Panel2

Répondre

0

Vous utilisez ucTimeTracker pour référencer la méthode, qui est le nom de la classe. Plus tôt dans la méthode, vous créez une instance de cette classe (Dim a As New ucTimeTracker), vous devez donc appeler a. autoWriteFileOnExit() à la place, si c'est l'instance que vous souhaitez utiliser. Si ucTimeTracker est un contrôle sur le formulaire, vous devez plutôt utiliser le nom de ce contrôle.

Pour comprendre cela, vous devez comprendre la différence entre statiques membres et instance membres. Un membre statique peut être accédé directement à travers la classe, sans avoir besoin de créer une instance de la classe. Pour utiliser un membre d'instance, vous aurez besoin d'une instance de la classe en premier. Vous pouvez regarder la classe Int32 comme exemple:

' 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() 

méthodes Typiquement statiques n'agissent pas sur les données stockées à l'intérieur de la classe (bien que ce n'est pas toujours vrai), mais agit plutôt sur les données transmises aux méthodes à travers les paramètres. Les méthodes d'instance ont accès aux données internes de cette instance spécifique et peuvent agir sur ces données (comme dans l'exemple ci-dessus).

1

Il semble que vous utilisiez le nom de classe de contrôle utilisateur ucTimeTracker au lieu du nom d'instance. Cliquez sur le contrôle utilisateur en mode Création et dans la vue Propriétés, il existe une propriété "Nom". utiliser la valeur dans la propriété du nom (probablement ucTimeTracker1) à la place:

ucTimeTracker1.autoWriteFileOnExit() 
+1

Vous devez sugeest il enlève le Dim a comme nouveau ucTimeTracker de son code et, comme il ne fait rien ajouter à la confusion. – pipTheGeek

+0

A droite, lisez le commentaire de pipTheGeek;) –

Questions connexes