解释一下:CheckBox checkbox =(CheckBox)sender;

时间:2010-09-23 11:21:48

标签: c# asp.net

通过复选框时,我发现有写的

CheckBox checkbox = (CheckBox)sender

on checkBox1_CheckedChanged event。

请解释一下它的含义?

6 个答案:

答案 0 :(得分:12)

该行只会将sender投射到CheckBox

为什么?

CheckedChanged事件的事件处理程序签名是:

CheckChanged(object sender, EventArgs e)

因此,如果您想使用任何sender特定功能,则需要将CheckBox投回CheckBox - object没有太多可以使用的功能......

这样checkbox变量可用于获取复选框ID并对复选框进行操作。

答案 1 :(得分:5)

这是一个例子。在Gridview或Repeater中我们想要选择所有选项。如你所见 在你的邮箱上。如果你单击一个复选框就会选择.Code会更好地解释你。

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

我希望它有效。

答案 2 :(得分: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;

没有施法。

答案 3 :(得分:1)

sender参数(声明为普通Object)会转换为CheckBox,因为您显然知道该事件的发件人始终是CheckBox。

答案 4 :(得分: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);
}

答案 5 :(得分: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" />

Code Behind代码是

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