C# 动态添加使用C中窗体属性的窗体和按钮#

C# 动态添加使用C中窗体属性的窗体和按钮#,c#,C#,我想动态创建一个表单,然后向表单添加一个新按钮(也是动态的)。 现在我想写一个关于按钮点击事件的代码,如何使用表单属性。(它会产生范围问题。),我是否应该将我的表单声明为public。。。?[程序代码] ][1] 当我写myform.Hide()时输入 按钮的my click事件生成错误。您正在单击事件中创建myForm。变量具有方法级别的作用域。尝试将其声明为类作用域变量,并在单击事件中新建它 Form myform; //Notice that I have removed your de

我想动态创建一个表单,然后向表单添加一个新按钮(也是动态的)。 现在我想写一个关于按钮点击事件的代码,如何使用表单属性。(它会产生范围问题。),我是否应该将我的表单声明为public。。。?[程序代码] ][1]

当我写
myform.Hide()时输入

按钮的my click事件生成错误。

您正在单击事件中创建myForm。变量具有方法级别的作用域。尝试将其声明为类作用域变量,并在单击事件中新建它

 Form myform; //Notice that I have removed your declaration from your click event
              //this variable now has visibility throughout the entire class.

private void button3_Click(object sender, EventArgs e)
{
    myForm = new Form();  // I have instantiated it here
    myform.Show();
    myform.Text = "New Dynamic Window";
    Button hide = new Button();
    hide.Text = "Hide";
    hide.Show();
    hide.Location = new Point(50, 50);
    hide.Click += hide_Click;
    myform.Controls.Add(hide);
}

void hide_Click(object sender, EventArgs e)
{

               // myform.Hide();

}
或者,您可以保持原有的方式,将hide_Click事件中的sender对象强制转换为按钮,因为它是事件的源对象,其父对象是表单,您可以将其强制转换为表单,然后调用其隐藏方法

void hide_Click(object sender, EventArgs e)
{
    ((Form)((Button)sender).Parent).Hide();
}

您正在单击事件中创建myForm。变量具有方法级别的作用域。尝试将其声明为类作用域变量,并在单击事件中新建它

 Form myform; //Notice that I have removed your declaration from your click event
              //this variable now has visibility throughout the entire class.

private void button3_Click(object sender, EventArgs e)
{
    myForm = new Form();  // I have instantiated it here
    myform.Show();
    myform.Text = "New Dynamic Window";
    Button hide = new Button();
    hide.Text = "Hide";
    hide.Show();
    hide.Location = new Point(50, 50);
    hide.Click += hide_Click;
    myform.Controls.Add(hide);
}

void hide_Click(object sender, EventArgs e)
{

               // myform.Hide();

}
或者,您可以保持原有的方式,将hide_Click事件中的sender对象强制转换为按钮,因为它是事件的源对象,其父对象是表单,您可以将其强制转换为表单,然后调用其隐藏方法

void hide_Click(object sender, EventArgs e)
{
    ((Form)((Button)sender).Parent).Hide();
}

在事件处理程序中,您可以访问
sender
参数。可以使用此参数访问父窗体。以下是示例代码:

  void hide_Click(object sender, EventArgs e)
    {

         ((sender as Button).Parent as Form).Hide();

    }

在事件处理程序中,您可以访问
sender
参数。可以使用此参数访问父窗体。以下是示例代码:

  void hide_Click(object sender, EventArgs e)
    {

         ((sender as Button).Parent as Form).Hide();

    }
试试这个:

void hide_Click(object sender, EventArgs e)
{
     ((Control)sender).FindForm().Hide();
}
试试这个:

void hide_Click(object sender, EventArgs e)
{
     ((Control)sender).FindForm().Hide();
}

在“单击按钮”中无法访问您的表单。
您应该将表单声明为类成员。

您的表单无法通过单击按钮访问。
您应该将您的表单声明为班级成员。

您可以发布您的代码吗?代替图片。我写代码请检查…你必须在按钮外声明我的表单3\u单击事件你能发布你的代码吗?而不是图片。我写的代码请检查…你必须在button3\u点击事件外声明myForm