1

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

我试过这段代码:

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();
}
4

2 回答 2

3

使用ShowDialog(this)而不是Show().

于 2012-07-25T18:21:00.297 回答
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 :-)
}
于 2012-07-25T18:22:25.650 回答