无法在事件处理程序中访问Form_Load中的按钮

时间:2017-04-29 14:26:47

标签: c# winforms

我在Form_Load中有三个按钮,我给每个按钮提供大小,位置和文本。 当我单击其中一个按钮时,会出现一个新按钮,这将带我进入带有三个原始按钮的第一个屏幕。我清除屏幕并添加按钮,但是我收到错误“当前上下文中不存在名称'按钮'”。我该怎么做才能访问这些按钮。感谢。

的Form_Load:

        Button play = new Button();
        Button howtoplay = new Button();
        Button puzzles = new Button();
        play.Size = new Size(175, 70);
        puzzles.Size = new Size(175, 70);
        howtoplay.Size = new Size(175, 70);
        play.Location = new Point((ClientRectangle.Right/2)-(play.Width/2), 135);
        puzzles.Location = new Point((ClientRectangle.Right / 2) - (play.Width / 2), 210);
        howtoplay.Location = new Point((ClientRectangle.Right / 2) - (play.Width / 2), 285);
        play.Text = "Play";
        howtoplay.Text = "How To Play";
        puzzles.Text = "Puzzles";
        Controls.Add(play);
        Controls.Add(howtoplay);
        Controls.Add(puzzles);
        howtoplay.Click += new EventHandler(howtoplay_click);

howtoplay_click:

            play.Hide();
            puzzles.Hide();
            howtoplay.Hide();
            Button backB = new Button();
            backB.Size = new Size(100, 50);
            backB.Location = new Point((ClientRectangle.Right - backB.Width - 10), (ClientRectangle.Bottom - backB.Height - 10));
            backB.Text = "Back";
            backB.Click += new EventHandler(Back_Click);
            Controls.Add(backB);

Back_Click:

        Controls.Clear();
        Controls.Add(play); //error
        Controls.Add(puzzles); //error
        Controls.Add(howtoplay); //error

1 个答案:

答案 0 :(得分:2)

您已将按钮声明为Form_Load事件处理程序方法的局部变量:

private void Form_Load(object sender, EventArgs e)
{
     Button play = new Button();
     Button howtoplay = new Button();
     Button puzzles = new Button();
     // ...
}

这些变量在方法之外是不可用的。您应该使用表单字段:

// available in all instance methods of form
Button play;
Button howtoplay;
Button puzzles;

private void Form_Load(object sender, EventArgs e)
{
     play = new Button();
     howtoplay = new Button();
     puzzles = new Button();
     // ...
}

注意:通常只有在运行时动态地将这些控件添加到表单时才应手动创建控件。但是您正在Form_Load事件处理程序中创建控件,因此我建议您使用designer来创建控件。它将为每个控件创建一个类字段并添加适当的初始化代码。您需要做的就是从工具箱中拖放控件(在这种情况下为按钮),以形成和设置每个控件属性。