2017-10-05 3 views
2

J'ai un code qui peut utiliser randomLabel comme sender qui déclenche un événement. Dans ce code, je tente de modifier les propriétés de la police de sender, mais il semble donner une erreur de compilation. Est-ce qu'il y a un moyen de réparer ceci?Comment modifier "expéditeur" dans un événement?

private void mainForm_Load(object sender, EventArgs e) 
    { 
     randomLabel.MouseEnter += RandomLabel_MouseEnter; 
    } 

    private void RandomLabel_MouseEnter(object sender, EventArgs e) 
    { 
     sender.Font = new Font(sender.Font, FontStyle.Bold); 
    } 
+1

Vous devez convertir 'sender' de' object' en type 'randomLabel'. –

+0

'sender' est un **' 'objet' ** et les objets n'ont pas de propriété' Font'. Vous auriez besoin de le lancer comme un contrôle. – stuartd

Répondre

3

Vous pouvez « modifier » l'expéditeur, mais vous devez jeter le type correct pour que vous puissiez accéder à ses propriétés et méthodes.

private void RandomLabel_MouseEnter(object sender, EventArgs e) 
{ 
    var sender2 = sender as Label; 
    if (sender2 != null) 
     sender2.Font = new Font(sender2.Font, FontStyle.Bold); 
} 
0

sender est de type object qui ne dispose pas d'une propriété Font. Vous auriez besoin de le jeter dans le type approprié premier

Si l'on suppose qu'il est une étiquette ..

((Label)sender).Font = new Font(((Label)sender).Font, FontStyle.Bold); 

Il est probablement un bon choix pour vous assurer sender est en fait le type que vous attendez qu'il utilise soit les opérateurs is ou as avant cependant. Juste au cas

1

Vous devez lancer sender au contrôle approprié. Par exemple.

private void RandomLabel_MouseEnter(object sender, EventArgs e) 
{ 
    Control control = sender as Control; 
    if (sender != null) 
    { 
     control.Font = new Font(control.Font, FontStyle.Bold); 
    } 
    else 
    { 
     throw new InvalidArgumentException("sender"); 
    } 
} 
+2

Gardez les choses simples. Il suffit de lancer 'sender' à' Control': '((Expéditeur)) .Font'. A propos, 'is' alors le cast n'est pas efficace - la bonne façon de procéder est 'as', puis null-checking (voir la réponse de @ NightOwl888). – Dennis

+0

@Dennis, de bons points. Actualisé. – DiskJunky