podczas przechodzenia przez pole wyboru Znalazłem tam jest napisaneWyjaśnij to: Pole wyboru CheckBox = (CheckBox) sender;
CheckBox checkbox = (CheckBox)sender
na checkBox1_CheckedChanged
imprezy.
Proszę wyjaśnić, co to znaczy?
podczas przechodzenia przez pole wyboru Znalazłem tam jest napisaneWyjaśnij to: Pole wyboru CheckBox = (CheckBox) sender;
CheckBox checkbox = (CheckBox)sender
na checkBox1_CheckedChanged
imprezy.
Proszę wyjaśnić, co to znaczy?
Linia po prostu rzuca sender
na CheckBox
.
Dlaczego?
Podpis obsługi zdarzeń dla zdarzenia CheckedChanged
jest:
CheckChanged(object sender, EventArgs e)
Tak, trzeba rzucić sender
powrotem do CheckBox
jeśli chcesz używać CheckBox
specyficzną funkcjonalność - object
nie ma dużo, że ciebie można użyć ...
W ten sposób można użyć zmiennej checkbox
, aby uzyskać identyfikator pola wyboru i działać w polu wyboru.
Zakładam definicja metoda jest mniej więcej tak:
void checkBox1_CheckedChanged(object sender,EventArgs e){
CheckBox checkbox = (CheckBox)sender;
//....
}
Zasadniczo co robią tutaj jest odlanie sender
zmienną, która jest zadeklarowana jako jedynego obiektu ogólnego do (o wiele bardziej „użyteczne”) CheckBox
zmienna.
Jest to zwykle robione, ponieważ trzeba rzutować, aby uzyskać dostęp do "konkretnych" właściwości CheckBox.
Na przykład
sender.Checked=true;
nie będzie działać. Trzeba by to zrobić:
((CheckBox)sender).Checked=true;
co oczywiście jest bardzo brzydki, więc jest dużo łatwiej zadeklarować nową zmienną wyboru i wtedy można po prostu zrobić
checkbox.Checked=true;
bez odlewania.
Parametr sender
(zadeklarowany jako zwykły Object
) jest przesyłany do CheckBox
, ponieważ najwyraźniej wiadomo, że nadawcą tego zdarzenia jest zawsze CheckBox.
Jak mówi Oded, potrzebny jest rzut z powodu sygnatury procedury obsługi zdarzeń.
Ty mógł użycie checkBox1
w obsłudze zdarzenia zamiast na typecast, ale do czynienia z sender
można ponownie wykorzystać CheckChanged
logiki dla innych kontroli, a także - choć w tym przypadku należy refactored w coś razem linie:
private void MyFancyCheckChanged(CheckBox sender, EventArgs e)
{
// do stuff
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
MyFancyCheckChanged((CheckBox) sender, e);
}
Nie wszystko zdobyte w ten sposób. Wszystko, co zrobiłeś, to ustawić stół dla magazynu spaghetti. –
@Joel: jeśli chodzi o ekstrakcję metody, to zależy to od tego, czy kod rzeczywiście * jest * ogólnego użytku - w takim przypadku prawdopodobnie powinien być również wyrzucony z klasy i umieszczony gdzieś bardziej odpowiedni. – snemarch
Oto example.Suppose w Gridview lub Repeater chcemy wybrać wszystkie option.As widzieliście na swojej skrzynce pocztowej.Tam jedno pole wyboru, jeśli klikniesz na to wszystko, wybierze. Kod lepiej ci wyjaśni.
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;
}
}
Mam nadzieję, że to działa.
Klasa CheckBox przedstawia pole wyboru, które użytkownicy mogą wybierać i usuwać. W tym temacie przedstawiono kontrolkę CheckBox w programie Windows Presentation Foundation (WPF) i opisano sposób tworzenia elementów CheckBox w języku Extensible Application Markup Language (XAML) i C#, ustawianie procedur obsługi zdarzeń w języku C#, tworzenie formantów CheckBox zawierających bogate treści, takie jak obrazy, i użyj stylizacji, aby zmienić wygląd kontrolki. Tutaj podałem próbkę dla ciebie.
<asp:CheckBox ID="CheckBox1" runat="server" Text="www.google.com"
OnCheckedChanged="CheckBox1_CheckedChanged" />
<asp:CheckBox ID="CheckBox2" runat="server" Text="www.yahoo.com" />
kod związany kod jest
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
if (CheckBox1.Checked)
Response.Redirect("www.google.com");
else
Response.Redirect("www.yahoo.com");
}
Chciałabym +1 ci jeszcze raz za korzystanie z „pozornie” :) – xtofl