我创建了两种形式:登录表单和开始调试时显示的主表单。 加载主窗体时,也会加载登录表单。 现在我的问题是,我想在加载登录表单时禁用主表单。 如果连接成功,则必须启用主窗体,否则应禁用它。
我试过这段代码:
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();
}
答案 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 :-)
}