当孩子打开时,禁用MDI表单的控件

时间:2013-08-13 07:23:20

标签: c# .net vb.net winforms

我有一个名为MainForm的MDIParent表单。它有一个名为SelectDB的子表单。在SelectDB表单中,我有一个按钮,单击该按钮可打开FileDialog以浏览并选择.MDB文件。文件的路径显示在TextBox中。获取.MDB文件后,子窗体关闭,MainForm可见。在MainForm上我有一个Label,它应该显示我在Textbox中获得的路径。而且,当儿童表格开放时。菜单条也应该被禁用,或者你可以说MDI表格中的所有控件都应该被禁用。

enter image description here

我的MainForm.vb(MDIParent)代码是这样的:

导入System.Windows.Forms

Public Class MainForm

    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        sDB.MdiParent = Me
        sDB.Show()
    End Sub

    Public Sub Formload()
        msMenu.Enabled = True
        lblPath.Text = OG.GetValue("DBPath")
        Me.Refresh()
    End Sub
End Class

我的SelectDB.vb(子窗体)代码是这样的:

Public Class SelectDB    

    Private Sub btnBrowse_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
        Dim dlg As New OpenFileDialog
        dlg.DefaultExt = ".txt"
        dlg.Filter = "MDB Files (*.mdb)|*.mdb"
        Dim result As Nullable(Of Boolean) = dlg.ShowDialog()
        If result = True Then
            Dim filename As String = dlg.FileName
            txtPath.Text = filename
        End If
        OG.SetValue("DBPath", txtPath.Text)
        main.Formload()
        Me.Hide()
    End Sub

    Private Sub btnExit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.Click
        Application.Exit()
    End Sub

    Private Sub SelectDB_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Application.Exit()
    End Sub

End Class

请帮助我。

2 个答案:

答案 0 :(得分:2)

放置me.dispose()代替me.hide()。这将有助于您完成预期的工作。

答案 1 :(得分:0)

你想要达到的目标有多种选择(Hans Passant已经提到过)是最简单的选择:使用ShowDialog()而不是Show。

第二个选项:首先,您可以在主窗体中创建一个公共方法,并在打开和关闭时从客户端调用该方法。像:

[主要表格]

public void ChildControls(bool IsEnabled)
{
  msMenu.Enabled = IsEnabled;
}

[儿童]

 private void child_Activated(object sender, EventArgs e)
    {
        if (this.MdiParent != null)
            ((mainForm)this.MdiParent).ChildControls(false);
    }
    private void child_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (this.MdiParent != null)
            ((mainForm)this.MdiParent).ChildControls(true);
    }

第三个选项

使用mainform'MdiChildActivate事件。当ActiveMdiChild == null您可以再次启用控件时。但是当你使用MdiChildActivate并且你有更多(和不同的)Mdi(子)形式时,你应该在(取消)激活控件之前进行类型检查。