2

我有一个名为 MainForm 的 MDIParent 表单。它有一个名为 SelectDB 的子窗体。在 SelectDB 表单中,我有一个按钮,单击该按钮会打开 FileDialog 以浏览并选择一个 .MDB 文件。文件的路径显示在文本框中。获得 .MDB 文件后,子窗体关闭并且 MainForm 可见。在 MainForm 我有一个标签,它应该显示我在文本框中得到的路径。此外,当子表单打开时。菜单条也应该被禁用,或者你可以说 MDI 表单中的所有控件都应该被禁用。

在此处输入图像描述

我的 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

请帮我解决一下这个。

4

2 回答 2

2

代替. me.dispose()_ me.hide()这将帮助您完成预期的工作。

于 2013-08-13T07:52:07.683 回答
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);
    }

第三个选项

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

于 2013-08-13T10:03:17.813 回答