2009-03-05 6 views
0

Je crée un formulaire avec quelques boutons et une liste déroulante lors de l'exécution.Comment intercepter des événements sur des objets d'exécution

dim f as new form 

(bla bla)

puis les boutons acceptDescription et rejectDescription sont mis en place ...
alors le combobox descriptionCombo est mis en place ...

puis ...

AddHandler acceptDescription.Click, AddressOf handleAcceptedDescription 
AddHandler rejectDescription.Click, AddressOf handleRejectedDescription 

alors j'ai ces deux méthodes pour attraper les événements de clic ... mais ne peut pas comprendre comment référencer l'autre générer d contrôles. (liste déroulante si acceptée, formulaire si rejeté)

Private Sub handleAcceptedDescription(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    'stub 
    'will need to reference the chosen combobox value here 
    dim acceptedDescription as string = descriptionCombo.selectedValue .tostring 
End Sub 
Private Sub handleRejectedDescription(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    'I want to close the runtime created form here, but can't reference it 
    f.close() 
    'and return user to main form 
    Me.Focus() 
End Sub 

Répondre

0

Afin d'éviter les définitions globales, la meilleure réponse est

Private Sub handleRejectedDescription(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    'sender is a button in this case. 
    'get the button 
    dim b as new button 
    b = ctype(sender,button) 
    'now get the button's parent form 
    dim f as new form 
    f = ctype(b.parent, form) 
    'now close the form 
    f.close() 
End Sub 
0

Pourquoi ne pas le référencer? Enregistrez-le simplement en tant que variable de module/niveau de formulaire et vous êtes défini.

1

Si le code pour générer le formulaire figure dans votre formulaire principal, déclarez la variable Form au niveau de classe de la classe de formulaire principal pour pouvoir y accéder à partir des gestionnaires d'événements. Il en va de même pour votre zone de liste déroulante et champ de texte - vous devez vous assurer que les variables sont déclarées en dehors de la portée des gestionnaires de sorte que vous pouvez les référencer dans les gestionnaires.

+0

Cela devrait fonctionner - mais je pensais qu'il doit être possible sans déclarer des variables plus globales. Merci. – m42

+0

Si le formulaire est généré de la même manière à chaque fois, vous pouvez envisager d'écrire une nouvelle sous-classe Form avec la zone de liste déroulante et la zone de texte public déclaré. –

Questions connexes