如何在运行时清除表单控件c#

时间:2015-09-09 08:30:13

标签: c# winforms

我正在设计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);
                }
}

任何人都可以给我一段代码或链接吗?

3 个答案:

答案 0 :(得分:1)

问题是你没有从From1发送文本,而是在Form2中创建一个新的Form1。这不是我想要的......

解决这个问题:

  1. 在Form2中添加一个String属性,名为'ControlText'。

  2. 假设用户在名为Text1的文本框中写入文本 Form1中

  3. 然后你可以像这样从Form1调用form2:

    sort -u *.txt | ...
    

    最后,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);
                }
            }
    

答案 1 :(得分:0)

希望这可以帮到你

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();
                }
            }
        }      
    }

答案 2 :(得分:0)

试试这个

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