我检查并发现this这类问题中提到过很多次的文章,但这不是我想要的答案...
我有一个表单Form_Main frmMainPage
,它创建了Form_Status frmStatus
。
当这样做时,我禁用了frmMainPage
上的控件,以使用户在处理事物时不会弄乱事物。
处理完毕后,他们可以关闭frmStatus
窗口以返回到frmMainPage
继续工作。我无法从frmStatus
重新启用控件。我尝试使用frmMainPage_Enter
,但是它在第一次加载时会发疯,因此实际上不是一个选择。
我在Form_Main.cs中有以下内容
public void EnableForm() {
this.gridData.Enabled = true;
this.txtLocation.Enabled = true;
this.txtSupplier.Enabled = true;
this.txtItem.Enabled = true;
this.FillTable("", "", "");
}
当我使用它时(上面的每篇文章):
private void btnClose_Click(object sender, EventArgs e) {
Form_Main f2 = new Form_Main();
f2.Show();
f2.EnableForm();
this.Close();
}
它创建一个第二 Form_Main,这不是我想要的不是。我想知道如何更改现有表单中的控件。
编辑:否,也没有建议使用this。当答案由表单1创建时,大多数答案都涉及从表单1更改表单1上的控件。在我的情况下,我需要做相反的事情,并更改由表单1创建的表单2上窗体1的控件。圆形的东西。
答案 0 :(得分:1)
我可以想到几种方法来做到这一点。第一种(也是最常见的)是模态显示第二种形式(这意味着在运行第二种形式的代码时,第一种形式的代码会暂停):
private void button1_Click(object sender, EventArgs e)
{
var statusForm = new frmStatus();
// ShowDialog will prevent frmMainPage from being accessible.
// This form's code will pause at the next line until the second form is closed
statusForm.ShowDialog();
}
在某些情况下,您希望同时访问两个表单。如果是这种情况,另一种方法是为第二个表单的FormClosed
事件添加一个事件处理程序,您可以在其中重新启用第一个表单的控件。这将允许同时访问两种形式:
private void button1_Click(object sender, EventArgs e)
{
var statusForm = new frmStatus();
// Add an event handler for the second form's FormClosed event, and
// put code in that event handler to re-enable controls on this form
statusForm.FormClosed += statusForm_FormClosed;
// Disable our controls on this form and show the second form
DisableForm();
statusForm.Show();
}
private void statusForm_FormClosed(object sender, FormClosedEventArgs e)
{
// When the second form closes, re-enable controls on this form
EnableForm();
}
private void DisableForm()
{
this.gridData.Enabled = false;
this.txtLocation.Enabled = false;
this.txtSupplier.Enabled = false;
this.txtItem.Enabled = false;
}
public void EnableForm()
{
this.gridData.Enabled = true;
this.txtLocation.Enabled = true;
this.txtSupplier.Enabled = true;
this.txtItem.Enabled = true;
this.FillTable("", "", "");
}
答案 1 :(得分:1)
您不需要执行此禁用启用。 您只需要使用ShowDialog()显示新内容即可;像这样:
frmStatus.ShowDialog();
而不只是:
frmStatus.Show();