2010-04-30 22 views
0

由於安德魯野兔his answer建議:C#列表框,則params

創建一個字段來存儲所有 ListBox的情況下,然後改變 構造函數接受任意 數人。

我嘗試以下

class scaner 
{ 
    readonly IEnumerable<ListBox> listBoxes; 

    public IEnumerable<ListBox> ListBoxes 
    { 
     get { return this.listBoxes; } 
    } 

    public scaner(params ListBox[] listBoxes) 
    { 
     this.listBoxes = listBoxes;  
    } 
} 

這將允許你這樣做:

scaner Comp = new scaner(listBox1, listBox2); 

如何訪問ListBox1中?

在課堂SCANER我試圖打電話this.listBoxes.
(我需要調用在SCANER class.How爲ListBox能做些什麼/叫它?

謝謝你的答案。

+1

有一件事:你應該使用第一個大寫字母 - > Scaner;) 請參閱大寫約定:http://msdn.microsoft.com/en-us/library/ms229043.aspx – digEmAll 2010-04-30 13:37:23

回答

3

爲什麼你不保存列表框爲...一個數組的數組?

public scanner 
{ 
    private ListBox[] listboxes; 

    public scanner(params ListBox[] listboxes) 
    { 
     this.listboxes = listboxes; 
    } 
} 

現在你可以在通話new scanner(listbox1, listbox2)爲訪問ListBox1中3210在您的掃描儀類。

0

您可以使用this財產,這樣的事情...

public class Scanner 
{ 
    private readonly ListBox[] _listboxes; 

    public Scanner(params ListBox[] listboxes) 
    { 
     _listboxes = listboxes; 
    } 

    public ListBox this[int index] 
    { 
     get 
     { 
      if(index < 0 || index > _listboxes.Length - 1) 
       throw new IndexOutOfRangeException(); 
      return _listboxes[index]; 
     } 
    } 
} 

用法:

ListBox listbox1 = new ListBox(); 
ListBox listbox2 = new ListBox(); 
var lst = new Scanner(listbox1, listbox2); 
var lstbox1 = lst[0]; 
2

我可能會關閉,但它看起來像,從您的其他問題,你有五個ListBox的每一個都有不同的含義,你可以對每一個做一些特別的事情。與其將所有內容傳遞給構造函數,並且依靠它們全部按照正確的順序,您可能需要傳入一組KeyValuePair<object,ListBox>。然後用你指定的密鑰分別獲取。

我不會依靠按特定順序傳遞params數組。如果你需要做一些非常具體的事情,第一個和第二個等等。

雖然我可能會對另一個問題做出太多的假設。