2010-09-23 15 views

risposta

12

La linea lancia semplicemente sender in un CheckBox.

Perché?

La firma gestore di eventi per l'evento CheckedChanged è:

CheckChanged(object sender, EventArgs e) 

Quindi, è necessario lanciare sender di nuovo ad un CheckBox se si vuole usare qualsiasi CheckBox specifica funzionalità - object non ha tanto che si può usare ...

In questo modo è possibile utilizzare la variabile checkbox per ottenere l'ID di casella di controllo e operare sulla casella di controllo.

3

Presumo definizione del metodo è qualcosa di simile:

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

Fondamentalmente quello che stanno facendo qui sta lanciando la variabile sender che viene dichiarato come solo un oggetto generico in una (molto più "utile") CheckBox variabile.

Questo è comunemente fatto perché è necessario eseguire il cast per accedere alle proprietà "specifiche" di un CheckBox.

Per esempio

sender.Checked=true; 

non funzionerà. Si dovrebbe fare questo:

((CheckBox)sender).Checked=true; 

che naturalmente è molto brutto, quindi è molto più facile per dichiarare una nuova variabile CheckBox e quindi si può semplicemente fare

checkbox.Checked=true; 

senza casting.

1

Il parametro sender (che viene dichiarato come semplice Object) viene convertito in CheckBox come apparentemente sapere che il mittente di quell'evento è sempre un CheckBox.

+0

Vorrei poter fare +1 voi ancora una volta per l'utilizzo di 'apparentemente' :) – xtofl

1

Come dice Oded, è necessario il cast a causa della firma del gestore eventi.

È potrebbe uso checkBox1 nel gestore di eventi al posto del l'typecast, ma trattare con il sender, è possibile riutilizzare la logica CheckChanged per altri controlli, come pure - anche se in quel caso, dovrebbe essere riscritta in qualcosa insieme le linee di:

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

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

Non hanno guadagnato niente in questo modo. Tutto quello che hai fatto è preparare il tavolo per un magazzino di spaghetti. –

+1

@Joel: se intendi l'estrazione del metodo, dipende dal fatto che il codice sia effettivamente * di * di uso generale - nel qual caso dovrebbe probabilmente anche essere estratto dalla classe e messo in un posto più appropriato. – snemarch

5

Ecco un example.Suppose in GridView o ripetitore vogliamo selezionare tutti option.As avete visto sulla vostra casella di posta elettronica.C'è una sola casella di controllo se si fa clic su tutto verrà selezionato. Codice sarà meglio spiegare.

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; 
    } 
} 

Spero che funzioni.

0

La classe CheckBox rappresenta una casella di controllo che gli utenti possono selezionare e cancellare. Questo argomento introduce al controllo CheckBox in Windows Presentation Foundation (WPF) e descrive come creare elementi CheckBox in XAML (Extensible Application Markup Language) e C#, impostare i gestori di eventi in C#, creare controlli CheckBox contenenti contenuti ricchi come immagini, e utilizzare lo stile per modificare l'aspetto del controllo. Qui ho dato un campione per te.

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

codice dietro il codice è

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