如何从另一个表单启用表单

时间:2012-07-25 18:18:28

标签: c#

我创建了两种形式:登录表单和开始调试时显示的主表单。 加载主窗体时,也会加载登录表单。 现在我的问题是,我想在加载登录表单时禁用主表单。 如果连接成功,则必须启用主窗体,否则应禁用它。

我试过这段代码:

MainFrm .cs:

private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
c.Enabled = false;
Connectez ConnectezFrm = new Connectez { TopMost = true, Owner = this };
ConnectezFrm.Show();
}

Connectez.cs:

private MainFrm objMainfrm { get; set; }
public Connectez(MainFrm objfrm)
{
objMainfrm = objfrm;
InitializeComponent();
}
....
....
private void simpleButton1_Click(object sender, EventArgs e)
{
foreach (Control c in objMainfrm.Controls)
c.Enabled = true;
this.Close();
}

2 个答案:

答案 0 :(得分:3)

使用ShowDialog(this)代替Show()

答案 1 :(得分:2)

您无需在表单上禁用单个控件即可禁用该表单。你可以用

objMainForm.Enabled = false;

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enabled

然而,你真正想要做的只是展示一个模态对话框。使用

ConnectezFrm.ShowDialog();

模态对话框可防止在父级处于活动状态时与其父级进行交互。

此外,您似乎尝试通过将对主窗体的引用传递给子窗体来实现此目的:

public Connectez(MainFrm objfrm)

没有必要获得模态对话效果。

如果您需要在连接失败时采取某些措施,可以从Connectez返回DialogResult。检查DialogResult是这样的:

DialogResult dr = ConnectezFrm.ShowDialog();
if (dr != DialogResult.OK) {
    // Do something e.g. disable certain parts of the form
    // Be sure to leave a button or something enabled to load ConnectezFrm again :-)
}