2010-09-23 2 views

ответ

12

Линия просто отливает sender в CheckBox.

Почему?

подпись обработчика событий для CheckedChanged события:

CheckChanged(object sender, EventArgs e) 

Итак, вам нужно бросить sender обратно к CheckBox, если вы хотите использовать какие-либо специальные функции CheckBox - object не имеет много, что вы может использовать ...

Таким образом, переменная checkbox может использоваться для установки флажка Id и работы с этим флажком.

3

Я предполагаю, что определение метода является то вроде этого:

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

В основном то, что они делают здесь заливкой sender переменную, которая объявлена ​​как только родовой объект в (гораздо более «полезным») CheckBox переменная.

Это обычно делается, потому что вы должны использовать для доступа к «конкретным» свойствам CheckBox.

Например

sender.Checked=true; 

не будет работать. Вы должны сделать это:

((CheckBox)sender).Checked=true; 

, которые, конечно, очень некрасиво, так что гораздо проще объявить новую переменную CheckBox, а затем вы можете просто сделать

checkbox.Checked=true; 

, без литья.

1

Параметр sender (который объявлен как простой Object) отличен до CheckBox, поскольку вы, по-видимому, знаете, что отправителем этого события всегда является CheckBox.

+0

Я хотел бы добавить +1 вас еще раз для использования «по-видимому» :) – xtofl

1

Как говорится в Oded, вам необходимо, чтобы актеры были связаны с сигнатурой обработчика события.

Вы могли использовать checkBox1 в обработчик событий вместо с приведения типов, но дело с sender, вы можете повторно использовать CheckChanged логику для других элементов управления, а также - хотя и в этом случае она должна быть переработана в нечто по линии:

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

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

Вы ничего не получили, делая это. Все, что вы сделали, - это таблица для склада спагетти. –

+1

@Joel: если вы имеете в виду извлечение метода, это зависит от того, действительно ли код * является * общего использования, - и в этом случае он также должен быть вырван из класса и помещен куда-то более подходящим. – snemarch

5

Вот example.Suppose в Gridview или повторителя мы хотим выбрать все option.As вы видели на ваш почтовый ящик.Там один флажок, если вы нажмете на него, выберет. Кодекс лучше объяснит вам.

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

Надеюсь, что это сработает.

0

Класс CheckBox представляет собой флажок, который пользователи могут выбирать и очищать. В этом разделе вы познакомитесь с элементом управления CheckBox в Windows Presentation Foundation (WPF) и описываете, как создавать элементы CheckBox в расширяемом языке разметки приложений (XAML) и C#, устанавливать обработчики событий на C#, создавать элементы управления CheckBox, содержащие богатый контент, такой как изображения, и используйте стиль, чтобы изменить внешний вид элемента управления. Здесь я дал вам образец.

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

Кодекс За код

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