0

A、B、Cの3つの形式があります。

ボタンがクリックされると、AはBを表示します。同様に、BはCを表示します。どちらもShowDialog()メソッドを使用します。

ただし、フォームCでHide()メソッド(Button Clickイベント内)を使用してフォームを閉じると、フォームBも閉じます。

なぜこれでしょうか?私が見る限り、これを行うべきではありません。私は確かにそれを行うように指示するコードを書きませんでした。

コードは次のとおりです。

' from Form "A" (MainForm)
Private Sub OrdersDataGridView_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles OrdersDataGridView.CellDoubleClick
    ShowViewOrderForm(sender)
End Sub

Private Sub ShowViewOrderForm(ByVal CurrentDGV As DataGridView)
    If Not CurrentDGV Is Nothing Then
        Dim f As New ViewOrderForm
        f.SetOrderNo(CurrentDGV.CurrentRow().Cells().Item(0).Value)
        f.SetDeliveryServiceType(CurrentDGV.CurrentRow().Cells().Item(5).Value)

        f.ShowDialog()
    End If
End Sub

' from Form "B" (ViewOrderForm)
Private Sub IssueOrderButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IssueOrderButton.Click
    Dim f As New IssueForm
    f.SetOrderNo(ThisOrderNo)
    f.ShowDialog()
End Sub

' from Form "C" (IssueForm)
Private Sub CloseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseButton.Click
    Me.Hide()
End Sub

更新:私はばかです。既存の[閉じる]ボタンからコピーして貼り付けたため、ボタンがオンDialogResultに設定されていましたが、プロパティが設定されていることに気づきませんでした。Cancelとにかく皆さんの提案をありがとう!

4

3 に答える 3

1

あなたが提供したコードであなたが見ている振る舞いを再現することができませんでした。これを引き起こしている可能性のある他の設定(おそらくデザイナーで設定されている)はありますか?

また、このHide()関数は実際にはウィンドウを閉じません。これは、VisibleプロパティをFalseに変更するのと同じです。ここで非表示についてお読みください。

本当にウィンドウを閉じたい場合は、を呼び出す必要がありますMe.Close()

于 2010-08-16T12:40:57.890 に答える
0

子フォームのmdiParentプロパティを設定してみてください。

    If IsNothing(_cases) Then
        _cases = New frmGrid        
        _cases.MdiParent = Me
        _cases.init(_main, 0, "", "")
        _cases.WindowState = FormWindowState.Maximized
    End If
    _cases.Visible = Me.mnuViewCaseFiles.Checked
于 2010-08-16T16:40:02.277 に答える
0

私が考えることができる唯一のことは、フォームCのボタンクリックイベントに接続されているフォームBのイベントハンドラーがあるということです...しかし、私が想像できないことに気付かずにそれを行う方法です。

IssueOrderButton_ClickフォームBのイベントでshowdialogを呼び出すときに、フォームCの親を設定してみてください。

f.ShowDialog(Me)

Me.Close()私はあなたがおそらくではなく使用したいと思うことに同意しますMe.Hide()

于 2010-08-16T16:50:32.343 に答える