2010-09-23 22 views

Respuesta

12

La línea simplemente arroja sender a CheckBox.

¿Por qué?

La firma controlador de eventos para el evento CheckedChanged es:

CheckChanged(object sender, EventArgs e) 

Por lo tanto, es necesario echar sender de nuevo a un CheckBox si desea utilizar cualquier funcionalidad específica CheckBox - object no tiene mucho que puede usar ...

De esta forma, la variable checkbox se puede usar para obtener el Id de la casilla de verificación y operar en la casilla de verificación.

3

Asumo la definición del método es algo como esto:

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

Básicamente lo que están haciendo aquí está echando la variable sender que se declara como sólo un objeto genérico en un (mucho más "útil") CheckBox variable.

Esto se hace comúnmente porque tiene que emitir para acceder a las propiedades "específicas" de un CheckBox.

Por ejemplo

sender.Checked=true; 

no va a funcionar. Usted tendría que hacer esto:

((CheckBox)sender).Checked=true; 

que por supuesto es muy feo, por lo que es mucho más fácil de declarar una nueva variable casilla de verificación y entonces simplemente puede hacer

checkbox.Checked=true; 

sin fundición.

1

El parámetro sender (que se declara como simple Object) se emite a CheckBox ya que aparentemente sabe que el remitente de ese evento siempre es un CheckBox.

+0

Me gustaría poder hacer +1 una vez más por el uso de 'parecer' :) – xtofl

1

Como dice Oded, necesita el elenco debido a la firma del controlador de eventos.

Usted podía uso checkBox1 en el controlador de eventos en lugar de la del encasillado, pero en relación con la sender, se puede reutilizar la lógica CheckChanged para otros controles también - aunque en ese caso, debe ser reprogramado para algo a lo largo las líneas de:

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

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

No ha ganado nada por hacer esto. Todo lo que has hecho es establecer la mesa para un almacén de spaghetti. –

+1

@Joel: si te refieres a la extracción del método, eso depende de si el código en realidad * es * de uso general, en cuyo caso probablemente también deba ser retirado de la clase y colocarlo en un lugar más apropiado. – snemarch

5

He aquí un example.Suppose en Gridview o repetidor que queremos seleccionar todos option.As que ha visto en su buzón de correo electrónico.Allí se seleccionará una sola casilla de verificación si hace clic en ella. El código lo explicará mejor.

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

Espero que funcione.

0

La clase CheckBox representa una casilla de verificación que los usuarios pueden seleccionar y borrar. Este tema presenta el control CheckBox en Windows Presentation Foundation (WPF) y describe cómo crear elementos CheckBox en Lenguaje de marcado de aplicaciones extensible (XAML) y C#, configura manejadores de eventos en C#, crea controles CheckBox que contienen contenido enriquecido como imágenes, y usa el estilo para cambiar la apariencia del control. Aquí he dado una muestra para usted.

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

el código detrás de código es

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