Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时c中清除窗体控件#_C#_Winforms - Fatal编程技术网

C# 如何在运行时c中清除窗体控件#

C# 如何在运行时c中清除窗体控件#,c#,winforms,C#,Winforms,我正在设计一个Windows窗体,以便在运行时创建子窗体。我希望子窗体根据在父窗体中输入的文本生成控件(按钮、列表框等)。我的问题是,当我关闭子窗体,输入新文本并重新启动子窗体时,会创建相同的控件 这是我如何称呼子窗体的: private void button2_Click(object sender, EventArgs e) { try { Form2 frm2 = new Form2();

我正在设计一个Windows窗体,以便在运行时创建子窗体。我希望子窗体根据在父窗体中输入的文本生成控件(按钮、列表框等)。我的问题是,当我关闭子窗体,输入新文本并重新启动子窗体时,会创建相同的控件

这是我如何称呼子窗体的:

private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Form2 frm2 = new Form2();

                frm2.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
这是子窗体中的代码

try
            {
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.BackColor = Color.White;
                this.ForeColor = Color.Black;
                this.Size = new System.Drawing.Size(550, 550);
                this.Text = "Test Create form in run time ";
               Form1 frm1 = new Form1();
               if (frm1.master == "button")
                  {
                    this.btnAdd.BackColor = Color.Gray;
                    this.btnAdd.Text = "Add";
                    this.btnAdd.Location = new System.Drawing.Point(90, 25);
                    this.btnAdd.Size = new System.Drawing.Size(50, 25);
                    this.Controls.Add(btn);
                }
}
有人能给我一段代码或链接吗?

希望这能对您有所帮助

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
  Utilities.ResetAllControls(this);
}

public class Utilities
    {
        public static void ResetAllControls(Control form)
        {
            foreach (Control control in form.Controls)
            {
                if (control is TextBox)
                {
                    TextBox textBox = (TextBox)control;
                    textBox.Text = null;
                }

                if (control is ComboBox)
                {
                    ComboBox comboBox = (ComboBox)control;
                    if (comboBox.Items.Count > 0)
                        comboBox.SelectedIndex = 0;
                }

                if (control is CheckBox)
                {
                    CheckBox checkBox = (CheckBox)control;
                    checkBox.Checked = false;
                }

                if (control is ListBox)
                {
                    ListBox listBox = (ListBox)control;
                    listBox.ClearSelected();
                }
            }
        }      
    }
试试这个

    foreach(control in this.Controls)
    {
        this.Controls.Remove(control);
        control.Dispose();
    }
    this.Controls.Clear();

问题在于,您不是从From1发送文本,而是在Form2中创建新的Form1。这不是你想要的我猜

要解决这个问题:

  • 在Form2中添加一个名为say'ControlText'的字符串属性

  • 假设用户将文本写入名为Text1的文本框中 表格1

  • 然后,您将从Form1调用form2,如下所示:

    private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    Form2 frm2 = new Form2();
                    frm2.ControlText = Text1.text
                    frm2.Show();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
    try
                {
                    this.MaximizeBox = false;
                    this.MinimizeBox = false;
                    this.BackColor = Color.White;
                    this.ForeColor = Color.Black;
                    this.Size = new System.Drawing.Size(550, 550);
                    this.Text = "Test Create form in run time ";
                   if (ControlText == "button")
                      {
                        this.btnAdd.BackColor = Color.Gray;
                        this.btnAdd.Text = "Add";
                        this.btnAdd.Location = new System.Drawing.Point(90, 25);
                        this.btnAdd.Size = new System.Drawing.Size(50, 25);
                        this.Controls.Add(btn);
                    }
    }
    
    最后,表单2中的代码如下所示:

    private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    Form2 frm2 = new Form2();
                    frm2.ControlText = Text1.text
                    frm2.Show();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
    try
                {
                    this.MaximizeBox = false;
                    this.MinimizeBox = false;
                    this.BackColor = Color.White;
                    this.ForeColor = Color.Black;
                    this.Size = new System.Drawing.Size(550, 550);
                    this.Text = "Test Create form in run time ";
                   if (ControlText == "button")
                      {
                        this.btnAdd.BackColor = Color.Gray;
                        this.btnAdd.Text = "Add";
                        this.btnAdd.Location = new System.Drawing.Point(90, 25);
                        this.btnAdd.Size = new System.Drawing.Size(50, 25);
                        this.Controls.Add(btn);
                    }
    }
    

    添加您的代码,可能您没有销毁旧窗口。在form2的OnClose中,在具有文本的控件中创建如下内容:text.text=”“您是否从中绑定表单控件和对象结构的数据?这不会“销毁”窗口。把它关上。制作如下
    form2.Dispose()
    form2=new Form()
    请输入您的代码,这样我就可以清楚地了解问题所在