2009-11-17 71 views
0

我有一個DropDownList,其SelectedIndexChanged事件我設置:你可以設置ASP.NET控件的EventArgs嗎?

move.SelectedIndexChanged += Move; 

public void Move(object sender, EventArgs e) 
{ 
} 

我想創建的EventArgs這是爭論的「e」是獲取傳遞給Move方法派生的類。

public void Move(object sender, EventArgs e) 
{ 
    MyEventArgs my_e = (MyEventArgs)e; 

    int Id = my_e.ID; 
    position = my_e.position; 
    etc; 
} 

這可能嗎? 如果是這樣,我可以給這個類的屬性,我可以在事件中使用:

我需要這樣做,因爲我想傳遞更多信息的Move方法比DropDownList當前包含。我可以將這些信息放在DropDownList的ID中,但這很醜陋,而且需要混亂的字符串解析。

ID = "Id_4_position_2" 

注:根據要求通過開發藝術

我朝着一個列表元素。我需要知道舊秩序和新秩序。我可以通過使用DropDownList ID來存儲舊訂單和SelectedValue來存儲新訂單。實際上,我擁有我所需要的一切,但在ID中下訂單似乎不太合適。我也想避免自定義事件,似乎工作量太大。

alt text http://www.yart.com.au/stackoverflow/move.png

回答

1

這是不可能的。

您不能將父類轉換爲子類。

你的意思是這樣的:

public class MyEventArgs : EventArgs 
{ 
} 

然後,你必須EventArgs e,並希望將其類型強制轉換爲MyEventArgs。這是行不通的。

子類延伸父類,這意味着它有更多的肉類。父級較窄。沒有任何明智的方法來自動擴展父類對象以成爲子類對象。


如果您爲UI控件創建子類並向其添加自定義屬性會怎樣?

public class PositionDropDownList : DropDownList 
{ 
    public int Id { get; set; } 
    public int Position { get; set; } 
} 

您在爲窗體生成控件時設置這些值。然後你可以在你的活動中找到他們:

public void Move(object sender, EventArgs e) 
{ 
    PositionDropDownList ddl = (PositionDropDownList)sender; 

    int Id = ddl.Id; 
    position = ddl.Position; 
} 

會是這樣的工作嗎?

+0

好點。有另一種方法來實現我想要的嗎? – Petras 2009-11-17 07:49:12

+0

從技術上講,可以使用自己想要的事件格式來定義自己的事件。我不確定你是否可以利用控件內部來替代你的事件。 – 2009-11-17 07:54:06

+0

你可能會解釋一下你需要控制傳入事件參數的額外信息嗎? – 2009-11-17 07:55:10

相關問題