ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 14.02.2001

Diese Seite wurde zuletzt aktualisiert am 14.02.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Modale MDI-Kinder

Zurück...


Anzeige

(-hg) mailto:hg_mdichildmodal@aboutvb.de

Modale MDI-Kind-Forms werden von Visual Basic nicht zugelassen. Wenn Sie verhindern möchten, dass ein anderes MDI-Kind-Form aktiviert wird, während ein bestimmtes MDI-Kind-Form geöffnet und aktiv ist, müssen Sie die Sperre der übrigen MDI-Kind-Forms selbst vornehmen. Auch die Sperre der übrigen Funktionen der Anwendungen, etwa Menüs des MDI-Haupt-Forms oder weitere Forms der Anwendung (beispielsweise ToolBoxen und dergleichen) bleibt Ihnen selbst überlassen.

Der einfachste Weg ist, das MDI-Haupt-Form mit einer eigenen Methode (ChildModal, siehe unten) zu versehen, die von den modal anzuzeigenden MDI-Kind-Forms jeweils beim Laden und Entladen aufgerufen wird. Beim Laden werden alle übrigen MDI-Kind-Forms gesperrt, also deren Enabled-Eigenschaft auf False gesetzt. Beim Entladen werden sie wieder freigegeben.

Soll sich die Modalität nicht nur auf die übrigen MDI-Kind-Forms beschränken, werden auch alle weiteren Forms gesperrt bzw. wieder freigegeben.

Ausgenommen bleibt in jedem Fall das MDI-Haupt-Form. Denn würde dieses gesperrt, würde automatisch auch das modal anzuzeigende MDI-Kind-Form mit gesperrt - nichts ginge mehr. Statt dessen sorgen Sie mit einer privaten Sperr-Variable im MDI-Haupt-Form gezielt für eine Sperre von Funktionen, die während der Anzeige des modalen MDI-Kind-Forms nicht ausgeführt werden sollen bzw. dürfen.

Beim Aufruf der Methode ChildModal im MDI-Haupt-Form übergibt das aufrufende MDI-Kind-Form im ersten Parameter eine Referenz auf sich selbst, damit es beim Durchlaufen der vorhandenen, geladenen Forms ausgenommen werden kann. Schließlich soll es selbst ja nicht gesperrt werden.

Im zweiten Parameter Modal wird angegeben, ob die Modalität gesetzt oder aufgehoben wird. Da dieser Parameter optional und auf True voreingestellt ist, können Sie ihn beim Setzen der Modalität der Einfachheit halber auch weglassen.

Im weiteren optionalen Parameter NotifyMDIMain legen Sie fest, ob die Ausführung von Funktionen des MDI-Haupt-Forms durch Setzen der Sperr-Variablen mChildModal unterbunden werden soll.

Im letzten, ebenfalls optionalen Parameter AppModal legen Sie fest, ob die Modalität für die ganze Anwendung gelten soll.

Private mChildModal As Boolean

Public Sub ChildModal(Child As Form, _
 Optional ByVal Modal As Boolean = True, _
 Optional ByVal NotifyMDIMain As Boolean = True, _
 Optional ByVal AppModal As Boolean = False)

  Dim nForm As Form
  
  If AppModal Then
    mChildModal = Modal
    For Each nForm In Forms
      If Not (nForm Is Me) Then
        If Not (nForm Is Child) Then
          nForm.Enabled = Not Modal
        End If
      End If
    Next
  Else
    If NotifyMDIMain Then
      mChildModal = Modal
    End If
    For Each nForm In Forms
      If Not (nForm Is Me) Then
        If nForm.MDIChild Then
          If Not (nForm Is Child) Then
            nForm.Enabled = Not Modal
          End If
        End If
      End If
    Next
  End If
End Sub

Die Aufrufe für die einfache Modalität in Bezug auf die übrigen MDI-Kind-Forms sehen in einem MDI-Kind-Form beispielsweise so aus, wenn auch zugleich die Funktionen des MDI-Haupt-Forms gesperrt werden sollen:

Private Sub Form_Load()
  mdiMain.ChildModal Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
  mdiMain.ChildModal Me, False
End Sub

Die Aufrufe für eine Modalität in Bezug auf die gesamte Anwendung sehen wie folgend aus:

Private Sub Form_Load()
  mdiMain.ChildModal Me, , , True
End Sub

Private Sub Form_Unload(Cancel As Integer)
  mdiMain.ChildModal Me, False, , True
End Sub

Wenn beispielsweise während der Anzeige eines modalen MDI-Kind-Forms keine weiteren MDI-Kind-Forms angelegt werden dürfen, könnte das Click-Ereignis eines entsprechenden Menü-Punktes so aussehen:

Private Sub mnuChild_Click()
  Dim nForm As frmChild
  
  If mChildModal Then
    Beep
    Exit Sub
  End If
  Set nForm = New frmChild
  nForm.Show
End Sub

Und das Entladen des MDI-Haupt-Forms (und damit meist Beenden der gesamten Anwendung) während der Anzeige eines modalen MDI-Kind-Forms können Sie zum Beispiel durch folgenden Code verhindern:

Private Sub MDIForm_QueryUnload(Cancel As Integer, _
 UnloadMode As Integer)

  Select Case UnloadMode
    Case vbFormCode, vbFormControlMenu
      Beep
      Cancel = mChildModal
  End Select
End Sub

Beispiel-Projekt MDIChildModal (mdichildmodal.zip - ca. 5,8 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer