2010-10-22 70 views
0

請幫助!我不知道這是否過於簡單,但我無法正確理解,並且似乎無法在其他帖子上找到正確的答案。我對C#比較陌生,我只是爲了愛好而編程,這是我的第一篇文章。創建它的方法之外訪問動態控制

我有這個方法CreateMap()裏面的一個類Met我有我所有的方法。它創建一個動態自定義控件(stockBox [])的數組,並將它們添加到Form內的表格佈局面板(boxContainer)中。此方法在應用程序打開時運行。我得到的一切工作正常,問題是,我想從另一個方法在同一個類中訪問stockBox控件我看不到有智能感知的stockBox,它說它不存在!

public static class Met 
{ 
    public static StockBox[] CreateMap(string[] stock, TableLayoutPanel boxContainer) 
    { 
     StockBox[] stockBox = new StockBox[Var.stockCount + 1]; 

     for (int i = 1; i <= Var.stockCount; i++) 
     { 
      stockBox[i] = new StockBox(); 
      stockBox[i].StockText = stock[i]; 
      boxContainer.Controls.Add(stockBox[i]); 
     } 

     return stockBox; 
    } 
} 

無法放置StockBox [] stockBox =新StockBox [Var.stockCount + 1]的方法之外,因爲然後Var.stockCount爲0,將創建僅與一個對象的陣列。

任何想法?你認爲我能做什麼?提前致謝。

回答

0

stockBoxCreateMap()訪問它目前N個變量。該方法結束時將丟棄stockBox(在scope之外)。因此,你需要將stockBox移動到一流水平如下:

public static class Met 
{ 
    static StockBox[] stockBox = null; 
    public static StockBox[] CreateMap(string[] stock, TableLayoutPanel boxContainer) 
    { 
     stockBox = new StockBox[Var.stockCount + 1]; 

     for (int i = 1; i <= Var.stockCount; i++) 
     { 
      stockBox[i] = new StockBox(); 
      stockBox[i].StockText = stock[i]; 
      boxContainer.Controls.Add(stockBox[i]); 
     } 

     return stockBox; 
    } 

    public static AccessStockBox() 
    { 
     if (stockBox != null) 
     { 
      //you should be able to access stockbox here 
     } 
    } 
} 
+0

謝謝你的工作! – VerizonW 2010-10-22 04:16:57

+0

如果我使用stockBox的方法都在Met類中,現在我已經完成了這個工作,那麼我不需要返回stockBox嗎? – VerizonW 2010-10-22 04:23:37

+0

是的。你不需要爲你的CreateMap()方法返回stockBox。只需將其聲明爲public static void CreateMap(string [] stock,TableLayoutPanel boxContainer) – bla 2010-10-22 05:16:29

0

確保StockBox不在met類中,並且如果它是明確聲明的,那麼它是明確聲明的。如果StockBox在會議和公開場合,請通過調用Met.StockBox進行訪問。

+0

我做了重新運行和李SY恩說,它的工作,如果我的方法,其使用stockBox都是大都會類裏面,現在我我已經做到了這一點,我不需要返回stockBox權利? – VerizonW 2010-10-22 04:22:50

0

有很多方法可以解決這個問題。你不能訪問定義在函數內部的任何變量做變量的範圍。 Scope是允許變量在代碼的有限部分中存在的概念。在你的情況下,你可以簡單地將控制數組聲明移動到類級別。然而,你將不得不使其靜態,因爲你是從一個靜態類

public static class Met 
{ 
    Static StockBox[] = null; 
    public static StockBox[] CreateMap(string[] stock, TableLayoutPanel boxContainer) 
    { 

     stockBox = new StockBox[Var.stockCount + 1]; 
     for (int i = 1; i <= Var.stockCount; i++) 
     { 
      stockBox[i] = new StockBox(); 
      stockBox[i].StockText = stock[i]; 
      boxContainer.Controls.Add(stockBox[i]); 
     } 

     return stockBox; 
    } 
} 
+0

謝謝你的工作! – VerizonW 2010-10-22 04:17:44