提问者:小点点

我不能在C#(Windows窗体应用程序)中使用该变量


错误CS0103名称“x”在当前上下文中不存在错误CS0103名称“y”在当前上下文中不存在

{
        public Game()
        {
            InitializeComponent();

        }

        private void Game_Load(object sender, EventArgs e)
        {
            int x = 10;
            int y = 11;

        }

        private void Lapkérés_Click(object sender, EventArgs e)
        {
            if (x > y)
            {
                MessageBox.Show("x bigger");
            }
        }
}

共3个答案

匿名用户

因为它们不存在于这种环境中。 这些变量仅在GAME_LOAD方法中定义,因此存在。

听起来似乎您希望它们成为类级别的成员:

class Game
{
    private int x;
    private int y;

    public Game()
    {
        InitializeComponent();
    }

    private void Game_Load(object sender, EventArgs e)
    {
        this.x = 10;
        this.y = 11;
    }

    private void Lapkérés_Click(object sender, EventArgs e)
    {
        if (this.x > this.y)
        {
            MessageBox.Show("x bigger");
        }
    }
}

通过这种方式,它们将在类的实例创建时被创建,并将在该实例中存活。 类中的任何方法都可以访问其实例的这些变量的值。

注意,game类的多个实例在这些变量中都有自己的值。 存在其他范围,这些范围可能与其他情况有关。 例如,这些值可以是statice,也可以将它们存储在外部文件或数据库中,以便在运行的应用程序之外持久化,等等。

(对于这个特殊的,可能是人为设计的示例,您甚至不需要game_load,您可以在声明值时直接在类级别设置值,或者在game()构造函数中设置值。但是我假设这里的计划是在game_load中引入更多逻辑,否则这些逻辑将不属于类级别或构造函数。)

匿名用户

您已经为Game_Load函数设置了x和y局部变量。

您将需要通过在类级别而不是方法级别声明它们来将它们移动到实例变量中。

匿名用户

在类级别定义变量

{
    private int x;
    private int y;
    public Game()
    {
        InitializeComponent();
    }

    private void Game_Load(object sender, EventArgs e)
    {
        x = 10;
        y = 11;
    }

    private void Lapkérés_Click(object sender, EventArgs e)
    {
        if (x > y)
        {
            MessageBox.Show("x bigger");
        }
    }

}