-2

我有一个错误要说;当前上下文中不存在名称“地图”。我究竟做错了什么?对不起,我对编码很陌生...

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        variables();
    }

    public static void variables()
    {
        string[,] map;
        map = new string[140, 140];

    }

    public static void updateMap(string[,] map)
    {
        MessageBox.Show("a");
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        updateMap(map);

    }


}
4

4 回答 4

2

创建类变量 string[,] 映射。

public partial class Form1 : Form
{
    public string[,] map; 

    ...

所以你的变量“map”可以在这个类的所有(非静态)方法中访问

于 2013-05-15T07:22:37.387 回答
1

摆脱你的可变方法。

public static void variables()
{
    string[,] map;
    map = new string[140, 140];

}

相反,将其保留在您的类中,以便所有其他方法都可以访问它。

将班级视为父母。类中的所有“方法”都是它的孩子。孩子们内心的一切都是它的“东西”。孩子们不喜欢分享,特别是和他们的兄弟姐妹分享。

既然如此,您希望它在父母可以控制的地方,而孩子必须遵循父母的“分享”规则

像这样。

public partial class Form1 : Form
{
    public string[,] map;
    map = new string[140, 140];

    public Form 1: Form1()
    {
     ....
    }
    private void Form1_Load()
    {
     .....
    }
    public static void updateMap()
    {
     .....
    }
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
    .....
    }
}
于 2013-05-15T07:37:54.910 回答
0

您只在方法map的上下文中声明variables(不确定该方法的用途)。因此,在该方法之外的任何地方都无法访问此变量。您需要将其声明为类属性,如下所示:

public partial class Form1 : Form
{
    private string[,] map;
    ...
}

然后,在您的Load方法上初始化它:

private void Form1_Load(object sender, EventArgs e)
{
    map = new string[140,140];
}

然后,您可以取消该variables方法并像现在一样从其他方法中引用此属性。

于 2013-05-15T07:24:22.187 回答
0

该变量map仅在此方法中有效,因为它在以下位置声明:

public static void variables()
{
    string[,] map;
    map = new string[140, 140];

}

如果它应该对整个类都有效,只需将其声明为一个字段:

public partial class Form1 : Form
{
    string[,] map;

    public Form1()
    {
       InitializeComponent();
    }
    ...
}

但这是非常非常基本的。我强烈推荐阅读一本关于 C# 的书:

http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=c%23

于 2013-05-15T07:24:54.617 回答