2010-09-23 39 views

回答

12

該行簡單地將sender轉換爲CheckBox

爲什麼?

CheckedChanged事件的事件處理程序的簽名是:

CheckChanged(object sender, EventArgs e) 

所以,你需要投senderCheckBox,如果你想使用任何CheckBox特定功能 - object沒有太多你可以使用...

這樣checkbox變量可用於獲取複選框ID並在複選框上操作。

3

我認爲該方法的定義是這樣的:

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

基本上他們在這裏做的是鑄造其聲明爲只有一個通用對象爲(更「有用」)CheckBoxsender變量變量。

這通常是因爲您必須強制轉換才能訪問CheckBox的「特定」屬性。

例如

sender.Checked=true; 

將無法​​正常工作。你必須要做到這一點:

((CheckBox)sender).Checked=true; 

這當然是非常難看,所以它更容易宣佈一個新的複選框變量,那麼你可以簡單地做

checkbox.Checked=true; 

沒有鑄造。

1

sender參數(聲明爲普通Object)被轉換爲CheckBox,因爲您顯然知道該事件的發件人始終是CheckBox。

+0

我希望我能再次+1您使用「顯然」 :) – xtofl 2010-09-23 11:29:16

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

你還沒有做這個事情得到。你所做的只是爲意大利麪條倉庫設置桌子。 – 2010-09-23 11:39:13

+1

@Joel:如果你的意思是提取方法,那取決於代碼實際上是否是普遍使用的 - 在這種情況下,它可能也應該從類中抽出並放在更合適的地方。 – snemarch 2010-09-23 12:19:42

5

這裏是GridView的或中繼器example.Suppose我們要選擇你有你的信箱看到 所有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類表示用戶可以選擇並清除的複選框。本主題向您介紹Windows Presentation Foundation(WPF)中的CheckBox控件,並介紹如何以可擴展應用程序標記語言(XAML)和C#創建CheckBox元素,在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"); 
}