演员(列表框)发件人

时间:2013-06-15 22:14:43

标签: c# winforms

我想知道下面发生了什么:

ListBox listboxNames = (ListBox)sender;

我从中理解的是:创建了一个动态列表框。

但是发件人做了什么,为什么要由(ListBox)投射?

3 个答案:

答案 0 :(得分:1)

基本上,它采用变量sender(这可能是由于你的函数可能是一个事件的处理程序,我是对的)?并将其转换为类型ListBox,并将该值放入名为listboxNames的变量中。这个工作的原因主要是由于参数senderListBox,但它必须转换为一个对象,以便能够将其发送到函数而不必加载过载(这是在仿制药可用之前)。但是,演员表会让你恢复原来的类型。

答案 1 :(得分:1)

通常sender是抛出事件的对象。在你的情况下它可能是ListBox,这就是为什么你可以把它投射到ListBox。所以它不是任何特殊的魔术对象,而是传递给你的方法的实际ListBox'伪装'作为一般对象。

因此,您不创建动态对象,但是您知道它必须是ListBox,您可以安全地投射它并使用它。但请注意,它与GUI中的ListBox相同,因此您对其所做的任何更改都将反映在您的GUI中。

答案 2 :(得分:1)

在这种情况下,sender很可能是事件处理程序中的参数,如下所示:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    // sender only provides access to Object members
    // radioButton provdes access to all members available to RadioButtons
    RadioButton radioButton = (RadioButton)sender;
}

是?在事件处理程序中,sender是对生成事件的对象的引用。在您的示例中,它是一个ListBox。在我的,它是一个RadioButton。但由于sender被键入为处理程序中的对象,因此您只能访问该特定实例的可用属性和方法的一小部分。访问ListBox或RadioButton等所有可用函数的唯一方法是将其强制转换为该类型。请注意,此处未创建任何新对象。在您的示例中sender 一个ListBox;您只是创建一个指向同一对象实例的新变量,并提供对ListBox所有成员的访问。

相关问题