请帮忙!我不知道这可能是太简单了,但我无法做到正确,似乎无法在其他帖子上找到正确的答案。我对C#比较陌生,我只是为了爱好而编程,这是我的第一篇文章。
我在类Met中有这个方法CreateMap(),我有我所有的方法。它创建了一个动态自定义控件(stockBox [])数组,并将它们添加到Form中的表格布局面板(boxContainer)中。该方法在应用程序打开时运行。我得到了一切正常工作,问题是我想从同一个类中的另一个方法访问stockBox控件我看不到带有IntelliSense的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 = new StockBox [Var.stockCount + 1],因为Var.stockCount为0,它将创建一个只有一个对象的数组。
有什么想法吗?你觉得我能做什么?提前谢谢。
答案 0 :(得分:0)
确保StockBox不在类中,并且如果是,则显式声明为public。如果StockBox在met和public中,则通过调用Met.StockBox来访问它。
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
您的stockBox
目前在CreateMap()
中是n变量。当方法结束时(scope之外)将处理stockBox
。因此,您需要将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
}
}
}