C# 如何在运行时c中清除窗体控件#
我正在设计一个Windows窗体,以便在运行时创建子窗体。我希望子窗体根据在父窗体中输入的文本生成控件(按钮、列表框等)。我的问题是,当我关闭子窗体,输入新文本并重新启动子窗体时,会创建相同的控件 这是我如何称呼子窗体的:C# 如何在运行时c中清除窗体控件#,c#,winforms,C#,Winforms,我正在设计一个Windows窗体,以便在运行时创建子窗体。我希望子窗体根据在父窗体中输入的文本生成控件(按钮、列表框等)。我的问题是,当我关闭子窗体,输入新文本并重新启动子窗体时,会创建相同的控件 这是我如何称呼子窗体的: private void button2_Click(object sender, EventArgs e) { try { Form2 frm2 = new Form2();
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。这不是你想要的我猜 要解决这个问题:
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()
请输入您的代码,这样我就可以清楚地了解问题所在