2008-12-01 11 views
0

Y a-t-il un moyen de faire référence à un contrôle de manière générique (de sorte que si le nom du contrôle change, etc.) vous n'avez pas de problème. C'est-à-dire, la version au niveau objet du mot-clé "me".Comment puis-je faire référence à un contrôle dans son événement? (sans utiliser son nom)

Donc, je voudrais utiliser quelque chose de générique au lieu de RadioButton1 dans l'exemple ci-dessous.

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _ 
     ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged 

     If RadioButton1.Checked Then 
      Beep() 

End Sub 

Répondre

3

permet de voir si je me souviens VB.NET:

Dim rb as RadioButton = sender 
If rb.Checked Then... 
8

Oui, le paramètre "expéditeur" est le contrôle qui a déclenché l'événement.

+0

Vous auriez besoin de le convertir au type spécifique, par ex. Bouton radio – Gishu

2

Vous pouvez choisir le nom de l'événement. Vous pouvez le faire avec les fenêtres d'événement (à côté de la propriété Windows) ou à l'intérieur du code. Vous choisissez le nom tout le temps. Vous pouvez simplement utiliser "checkedEvent".

this.checkbox.EventXYZ += new EventXZY(checkedEvent); 

Dans cette méthode, vous pouvez utiliser l'objet de l'expéditeur et CAST à (CheckBox) et de l'utiliser est la propriété ... et le comportement ...

public ... checkedEvent(object sender,...) 
    ((RadioButton)sender)..... 

Vous pouvez trouver un grand article que vous expliquera tout en VB.NET avec un événement TextBox (il a plusieurs TextBox et seulement 1 méthode pour traiter tous:

alt text http://clip2net.com/clip/m12122/1228156822-clip-4kb.png

2

Si vous avez juste une commande qui déclenche le gestionnaire d'événements alors il y a peu de raisons de généraliser le code afin que vous ne devez pas référencer le nom réel du bouton. La compilation va se casser si le contrôle n'existe pas.

Toutefois, si vous avez plusieurs contrôles accrochés au même gestionnaire d'événements, vous devez utiliser le premier argument (expéditeur) transmis au gestionnaire. Maintenant vous pouvez faire quelque chose de générique à l'un des contrôles qui ont déclenché l'événement:

Private Sub rbtn_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim rbtn As RadioButton = TryCast(sender, RadioButton) 
    If rbtn IsNot Nothing Then 
        If rbtn.Checked Then 
            rbtn.Text = rbtn.Text & "(checked)" 
        End If 
    End If 
End Sub 
Questions connexes