2

MainForm という名前の MDIParent フォームがあります。SelectDB という名前の子フォームがあります。SelectDB フォームには、クリックすると FileDialog が開き、.MDB ファイルを参照して選択するボタンがあります。ファイルのパスが TextBox に表示されます。.MDB ファイルを取得すると、子フォームが閉じ、MainForm が表示されます。MainForm には、Textbox で取得したパスを表示する Label があります。さらに、子フォームが開いているとき。メニュー ストリップも無効にするか、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 が既に述べていること) は最も簡単なものです: Show ではなく ShowDialog() を使用します。

2 番目のオプション:まず、メイン フォームでパブリック メソッドを作成し、開閉時にクライアントからそのメソッドを呼び出すことができます。お気に入り:

【主な形態】

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

3 番目のオプション:

メインフォームの MdiChildActivate イベントを使用します。ActiveMdiChild == nullコントロールを再度有効にできる場合。しかし、MdiChildActivate を使用していて、より多くの (そして異なる) Mdi (子) フォームがある場合は、コントロールをアクティブ化 (非アクティブ化) する前に、型チェックを実行する必要があります。

于 2013-08-13T10:03:17.813 に答える