2009-10-05 39 views
0

我有這樣的陣列信息c#如何發送帶有事件的數組?

string[] aInfo; // Contains information about this person 

我有一個菜單項一clickevent認爲是這樣的:

// Event for adding contact 
    mContact.Click += new EventHandler(addContactMenuClick); 

然後進一步轉化項目我有事件處理程序:

// Eventhandler for adding a contact 
    private void addContactMenuClick(object sender, System.EventArgs e) 
    { 
     string sNumber = ((MenuItem)sender).Text; 
     MessageBox.Show(sNumber); 
    } 

如何發送數組與事件?

所有這些都在foreach循環中,所以數組永遠不會相同。

在此先感謝

回答

3

定義自己的類,從EventArgs的派生並添加一個字段爲你的陣中還有。

class MyEventArgs : EventArgs 
{ 
    public string[] Info { get; private set; } 

    public MyEventArgs(string[] info) 
    { 
     this.Info = info; 
    } 
} 

EDIT(多虧了註釋):

當然,你不能改變的點擊,事件發送信息,因爲你不能更改爲觸發事件的代碼。

一種可能的解決方案是派生自己的MenuItem並將信息數組作爲字段添加到此派生類中。然後爲此字段提供一個屬性,以便您可以通過事件的sender參數訪問它。例如:

class MyMenuItem : MenuItem 
{ 
    public string[] Info { get; private set; } 

    public MyMenuItem(string[] strInfo) 
    { 
     this.Info = strInfo; 
    } 
} 

訪問:

protected void mnu_Click(object sender, EventArgs e) 
{ 
    MyMenuItem obj = sender as MyMenuItem; 

    if (obj != null) 
    { 
     //Access 
    } 
} 
+2

我假設點擊事件不是他定義的,所以他不能規定什麼EventArgs被髮送? – 2009-10-05 19:24:16

+0

當然,這是正確的。而且即使他參加了比賽,比賽也會受到控制,所以他不能改變電話。但是,例如,他可以使用自己的EventArgs觸發click事件,然後觸發自己的事件。 – 2009-10-05 19:29:11

+0

是的,但是他需要一種方法來知道該自定義EventArg類型的實例是什麼樣的。 – 2009-10-05 19:30:30

1

只是把它放在一個自定義事件參數的對象!只需創建一個對象(ContactMenuClickedEventArgs)或從事件參數繼承的東西。

將mContact封裝在另一個對象中,並重寫'click'功能。讓它創建自定義的EventArgs,並將它作爲'e'傳入!

1

您不能真的將信息添加到現有的事件類型。但是你可以派生你自己的EventArgs類(ContactAddedEventArgs),它可以容納你喜歡的任何信息,並設置一個接受這個新數據的新事件(ContactAdded)。

如果再要添加聯繫人當你得到一個點擊,那麼就使單擊事件處理程序創建用戶信息陣列(ContactAddedEventArgs),然後用它提升你的ContactAdded事件。

0

的關鍵是這一行的註釋:

string[] aInfo; // Contains information about this person 

「這個人」。所以aInfo是某個類的成員,是否正確?當你點擊你的addContact MenuItem時,你可能想用屏幕上的一些當前選中的對象作爲你的「聯繫人添加」。所以你需要知道如何做到這一點(在屏幕上找到當前選定的對象)。此對象可能與包含您的aInfo成員的類型有一些關係,如果不是,則需要修復該對象。

2

每個控件都有一個Tag屬性,它是「對象」數據類型。你可以將你的數組分配給這個屬性。然後在事件中,將其轉換回數組,然後使用它。

string[] aInfo; // Contains information about this person 

.... 
.... 

// Event for adding contact 
mContact.Click += new EventHandler(addContactMenuClick); 
mContact.Tag = aInfo; 

// Eventhandler for adding a contact 
private void addContactMenuClick(object sender, System.EventArgs e) 
{ 
    string sNumber = ((MenuItem)sender).Text; 
    string[] aInfo = (string[])((MenuItem)sender).Tag; 
    MessageBox.Show(sNumber); 
} 
相關問題