2014-06-16 61 views
0

對C#有點新鮮。我會嘗試盡我所能解釋我的問題。使用多態性訪問自定義工具屬性

我很難獲得我在自定義工具上創建的屬性。我在我的GUI上有很多這些工具,所以它不像使用屬性顯式輸入那樣簡單。這些控件包含在列表中,我希望能夠輕鬆訪問它們的屬性(這是它們的獨立解決方案項目的一部分)。這是我的東西我迄今爲止例如:

List<Control> controlList = new List<Control>(); 
private void btnStart_Click(object sender, EventArgs e) 
{   
    foreach (var item in controlList) 
    { 
     if (item.Enabled) 
     { 
      custom_control1.Code = "8917237"; 
      custom_control1.MacAddress = "000000000001"; 
     } 
    } 

// do other stuff based on the above credentials 

} 

我希望能夠做到以下在我的if語句:

item.Code = .... // calculation 
    item.MacAddress = .... // this will increment in hex depending on how many controls I have Enabled 

使「項」的每個實例都有該自定義控件屬性,我可以改變一個for循環或什麼。注意:根據計算,每個控制工具項目將具有不同的MAC和代碼。

我不知道如何實現這一點。我想我的主要問題是我能夠看到屬性的默認列表(如可見,啓用等),但不是我的自定義屬性。做類似:controlList[0].Code也不能幫助我,因爲同樣的問題。我顯然在這裏誤解了一些東西。

在此先感謝您的幫助。

+0

如果我正確地讀你的問題......只是所有的「共享」的屬性和方法添加到'interface',讓你控制'implement'的接口(可能帶有可能重寫的抽象基類)。然後在你的controlList循環中,將你的控件強制轉換爲接口類型 – ChristopheD

+0

當你說「自定義工具」時,你的意思是你已經創建了Control的子類? –

+0

@ChristopheD感謝您的幫助。這聽起來像你已經理解我的問題,但我不在我能夠理解它的水平,然後執行你的回答程序。如果你有時間,是否有可能提供一個我可以學習的例子?那麼我可能會從這個理解的角度來實施。 – Shen

回答

0

要直接在列表對象中訪問您的自定義屬性,列表需要是您的自定義類的列表,而不是Control。所以,與其

List<Control> controlList = new List<Control>(); 

使用

List<MyCustomClass> controlList = new List<MyCustomClass>(); 
+0

這工作!我可以通過List 獲得我的自定義屬性。謝謝。 – Shen