2010-10-22 92 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