2010-09-23 6 views

Répondre

12

La ligne affiche simplement sender en CheckBox.

Pourquoi?

La signature du gestionnaire d'événements pour l'événement CheckedChanged est:

CheckChanged(object sender, EventArgs e) 

, vous avez besoin de jeter sender revenir à un CheckBox si vous voulez utiliser toutes les fonctionnalités spécifiques CheckBox - object n'a pas beaucoup que vous peut utiliser ...

De cette façon, la variable checkbox peut être utilisée pour obtenir l'identifiant de la case à cocher et opérer sur la case à cocher.

3

Je suppose que la définition de la méthode est quelque chose comme ceci:

void checkBox1_CheckedChanged(object sender,EventArgs e){ 
    CheckBox checkbox = (CheckBox)sender; 
    //.... 
} 

Au fond ce qu'ils font ici est coulée la variable sender qui est déclarée comme seul un objet générique dans un (beaucoup plus « utile ») CheckBox variable. Ceci est généralement fait car vous devez effectuer un cast pour accéder aux propriétés "spécifiques" d'un CheckBox.

Par exemple

sender.Checked=true; 

ne fonctionnera pas. Vous auriez à faire:

((CheckBox)sender).Checked=true; 

qui est bien sûr très laid, il est donc beaucoup plus facile de déclarer une nouvelle variable CheckBox et vous pouvez simplement faire

checkbox.Checked=true; 

sans coulée.

1

Le paramètre sender (déclaré Object) est transtypé en CheckBox car vous savez apparemment que l'expéditeur de cet événement est toujours un CheckBox.

+0

Je voudrais pouvoir vous +1 à une fois de plus pour l'utilisation de « apparemment » :) – xtofl

1

Comme le dit Oded, vous avez besoin de la conversion en raison de la signature du gestionnaire d'événements.

Vous pourrait utiliser checkBox1 dans le gestionnaire d'événements au lieu du transtypage, mais face à la sender, vous pouvez réutiliser la logique CheckChanged pour d'autres contrôles aussi bien - mais dans ce cas, il devrait être refactorisé en quelque chose de long les lignes de:

private void MyFancyCheckChanged(CheckBox sender, EventArgs e) 
{ 
    // do stuff 
} 

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    MyFancyCheckChanged((CheckBox) sender, e); 
} 
+0

Vous avez rien gagné en faisant cela. Tout ce que vous avez fait est de mettre la table pour un entrepôt de spaghettis. –

+1

@Joel: si vous voulez dire l'extraction de la méthode, cela dépend si le code * est * d'utilisation générale - auquel cas il devrait probablement être également retiré de la classe et mis quelque part plus approprié. – snemarch

5

Voici un example.Suppose dans Gridview ou d'un répéteur que nous voulons sélectionner tous option.As vous avez vu sur votre boîte mail.Il y a une seule case à cocher si vous cliquez dessus tout sélectionnera. Le code vous expliquera mieux.

protected void ChkAll_CheckedChanged(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem rowItem in this.rptFriendsRecord.Items) 
    { 
     CheckBox chk = (CheckBox)rowItem.FindControl("cbFriend"); 
     chk.Checked = ((CheckBox)sender).Checked; 
    } 
} 

J'espère que cela fonctionne.

0

La classe CheckBox représente une case à cocher que les utilisateurs peuvent sélectionner et effacer. Cette rubrique présente le contrôle CheckBox dans Windows Presentation Foundation (WPF) et décrit comment créer des éléments CheckBox dans XAML (Extensible Application Markup Language) et C#, définir des gestionnaires d'événements en C#, créer des contrôles CheckBox contenant du contenu enrichi (images, et utilisez le style pour changer l'apparence du contrôle. Ici, j'ai donné un échantillon pour vous.

<asp:CheckBox ID="CheckBox1" runat="server" Text="www.google.com" 
    OnCheckedChanged="CheckBox1_CheckedChanged" /> 
<asp:CheckBox ID="CheckBox2" runat="server" Text="www.yahoo.com" /> 

Le code Derrière le code est

protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    if (CheckBox1.Checked) 
     Response.Redirect("www.google.com"); 
    else 
     Response.Redirect("www.yahoo.com"); 
}