none
mdi -> Form ->dialog RRS feed

  • Frage

  • Hallo Experten

    ich habe eine MDI Form in der ich eine Form2 öffne. Aus Form2 kann eine weitere Form3 geöffnet werden. Auf Form2 soll erst wieder der Focus gesetzt werden können, wenn Form2 geschlossen wird! Das öffnen von Form2 als Dialog ist unbrauchbar, weil es A) außerhalb der MDI Form geöffnet wird und b) auch auf alle anderen Formen, welche in der MDIFrom geöffnet sind, den Zugriff unterbindet.

    Gibt es eine Möglichkeit ?

    mfg eem Monarch


    Donnerstag, 29. März 2012 14:04

Antworten

  • Hallo,

    aus Windows Standardsicht ist es nur so vorgesehen, dass ein modaler Dialog die gesamte Anwendung blockiert. Die Modalität soll ja eine gewisse Wichtigkeit unterstreichen - "Bearbeite erst diesen Dialog, bevor es hier weiter geht".

    Als Workaround für das von Dir gewünschte Verhalten, kannst Du das aufrufende Formular deaktivieren, solange das "Dialogfenster" geöffnet ist:

      Private Sub Button1_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs _
    							      ) Handles Button1.Click
    								  
        Dim f As New Form1()
        AddHandler f.Shown, AddressOf DialogForm_Shown
        AddHandler f.FormClosed, AddressOf DialogForm_Closed
        f.MdiParent = Me.MdiParent
        f.Show()
      End Sub
    
      Private Sub DialogForm_Shown(ByVal sender As Object, ByVal e As EventArgs)
        Me.Enabled = False
      End Sub
    
      Private Sub DialogForm_Closed(ByVal sender As Object, ByVal e As EventArgs)
        Me.Enabled = True
      End Sub

    Das stellt aber nicht das gesamte modale Verhalten eines mit ShowDialog angezeigten Formulars dar.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de

    • Als Antwort markiert Monarch-Falter Donnerstag, 29. März 2012 19:07
    Donnerstag, 29. März 2012 18:46
    Moderator

Alle Antworten

  • Hallo,

    aus Windows Standardsicht ist es nur so vorgesehen, dass ein modaler Dialog die gesamte Anwendung blockiert. Die Modalität soll ja eine gewisse Wichtigkeit unterstreichen - "Bearbeite erst diesen Dialog, bevor es hier weiter geht".

    Als Workaround für das von Dir gewünschte Verhalten, kannst Du das aufrufende Formular deaktivieren, solange das "Dialogfenster" geöffnet ist:

      Private Sub Button1_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs _
    							      ) Handles Button1.Click
    								  
        Dim f As New Form1()
        AddHandler f.Shown, AddressOf DialogForm_Shown
        AddHandler f.FormClosed, AddressOf DialogForm_Closed
        f.MdiParent = Me.MdiParent
        f.Show()
      End Sub
    
      Private Sub DialogForm_Shown(ByVal sender As Object, ByVal e As EventArgs)
        Me.Enabled = False
      End Sub
    
      Private Sub DialogForm_Closed(ByVal sender As Object, ByVal e As EventArgs)
        Me.Enabled = True
      End Sub

    Das stellt aber nicht das gesamte modale Verhalten eines mit ShowDialog angezeigten Formulars dar.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de

    • Als Antwort markiert Monarch-Falter Donnerstag, 29. März 2012 19:07
    Donnerstag, 29. März 2012 18:46
    Moderator
  • Danke Thorsten,

    so "ähnlich" habe ich jetzt auch gemacht, dachte aber das dies nicht die Lösung sein kann.

    Wenn Form3 von Form2 aufgerufen wird, wird form2 ausgeblendet. Beim schliessen von Form3 erscheint dann Form2.

    mfg eem Monarch

    Donnerstag, 29. März 2012 19:07