如何在另一个处于活动状态且当前显示的表单中添加或删除控件?我使用以下代码:
private void button2_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.Controls.RemoveByKey("button1");
}
但由于Form1的新初始化,它无法正常工作。
答案 0 :(得分:1)
如果要删除控件的表单是另一个表单的子表单,则可以通过OwnedForms属性访问表单。访问后,您可以从中删除控件。例如
<强> Form1中强>
private void button1_Click(object sender, EventArgs e)
{
var form = new Form3 { Owner = this };
form.Show();
}
private void button2_Click(object sender, EventArgs e)
{
if(OwnedForms.Length > 0)
{
var form = OwnedForms[0];
//assuming there's a control with id 'One':
form.Controls.RemoveByKey("One");
}
}
答案 1 :(得分:1)
从评论中可以看出,Form2没有对Form1的引用。
您没有发布有关如何显示Form2的任何代码,但是这里有一个关于如何通过构造函数传递引用的示例:
public class Form2 : Form {
private Form1 _Form1;
public TestForm(Form1 form1) {
InitializeComponent();
_Form1 = form1; // <- this is the reference from Form1
}
}
然后,您对Form2的删除操作将如下所示:
private void button2_Click(object sender, EventArgs e) {
_Form1.Controls.RemoveByKey("button1");
}
从Form1创建Form2时,这是一个如何传递它的示例:
private Form2 _Form2;
private void button1_Click(object sender, EventArgs e) {
_Form2 = new Form2(this); // <- this is the reference of Form1 you are passing
_Form2.Show();
}
答案 2 :(得分:0)
如您所知,您需要一个 Form1 的实例
如果这是您的主表单并且您使用Visual Studio向导创建 Windows窗体应用程序,则可以查看程序类。通常有建立的主要形式
现在,您需要将new Form1()
表达式分配给变量,并使用按钮 button2 将其分配给第二个表单。