我正在设计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);
}
}
任何人都可以给我一段代码或链接吗?
答案 0 :(得分:1)
问题是你没有从From1发送文本,而是在Form2中创建一个新的Form1。这不是我想要的......
解决这个问题:
在Form2中添加一个String属性,名为'ControlText'。
假设用户在名为Text1的文本框中写入文本 Form1中
然后你可以像这样从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();