·  Start ·  Programme ·  Codes ·  Tipps ·  ActiveX ·  Tutorials · 




Eine Anleitung für Anfänger und Fortgeschrittene zum Thema MDI-Formulare. Obwohl die SDI (Single-Document-Interface)-Formulare derzeit überwiegen, gibt es doch auch Bereiche, in denen ein Multiple-Document-Interface sinnvoll sein kann. Beispielsweise für Texteditoren, HTML-Editoren, Grafikprogramme oder andere kleine Tools, wo immer wiederkehrende Templates geladen werden.

Übersicht:

Allgemeines
Fenster-Menüs
MDI und Visual Basic
Das erste MDI-Formular
Das Child-Formular
Menüs implementieren
Öffnen und Speichern
Zusammenfassung

 
 Allgemeines

Die Standardmerkmale von MDI-Formularen sind schnell erklärt:

Der dunklere Hintergrund (Client-Bereich) unterscheidet ein MDI sofort von einem SDI. Dieser Bereich ist für die Aufnahme von untergeordneten Formularen gedacht. Sie werden also innerhalb des Client-Bereiches verwaltet. Beispiele sind MS Word, Excel, diverse Grafikprogramme usw.

Die MDI-Formulare enthalten sinnvollerweise Menüs, optional auch noch Symbolleisten (Toolbars oder Coolbars). Praktisch ist auch noch eine Statusbar im MDI-Formular.
Um die einzelnen untergeordneten Fenster im MDI verwalten zu können, bedarf es auch des Menüpunkts "Fenster" (oder ein ähnlicher Name). Dieser sollte die folgenden Befehle enthalten:
ÜBEREINANDER, NEBENEINANDER, ÜBERLAPPEND und SYMBOLE ANORDNEN

 

 Fenster-Menüs

Folgende Varianten einer Fensterverwaltung wären denkbar und sinnvoll:

ÜBEREINANDER:
Die Fenster werden so angeordnet, dass sich jedes Fenster vom linken zum rechten Rand gestreckt wird. Haben Sie mehrere Fenster, werden diese in der Höhe reduziert. Das empfiehlt sich also nur, wenn nicht mehr als zwei oder drei Fenster geöffnet sind.

NEBENEINANDER:
Die Fenster werden von oben nach unten gestreckt und nebeneinander angeordnet - die Breite wird reduziert.

ÜBERLAPPEND:
Von oben links Richtung unten rechts werden die Fenster aufgefächert.

SYMBOLE ANORDNEN:
Die minimierten Fenster werden wie die Zinnsoldaten nebeneinander aufgereiht.

Weitere Menüs werden etwas später behandelt (Speichern, Öffnen, etc.)
 

 MDI-Formulare und Visual Basic

Visual Basic behandelt MDI-Formulare etwas differenzierter als "normale" SDI-Formulare. Ein MDI-Formular ist ein anderer Formulartyp und auch völlig anders aufgebaut. Ein MDI soll andere Formulare verwalten können und sozusagen als Container dienen.

Sie können nur ein MDI-Formular im Projekt verwenden (ein zweites wäre auch unnötig).

Auch wenn ein MDI-Formular als Container dient, können Sie simple SDI-Formulare anzeigen. Stellen Sie dazu die Eigenschaft MDIChild auf False.

Der kleine aber feine Unterschied liegt auf der Hand:
Wollen Sie mehrere Instanzen (wie Microsoft Word), also mehrere Formular öffnen, die unterschiedliche Daten beinhalten können,
gehen Sie so vor:
Dim NeuesFormular As New Form1 'Form1 ist der Name des ChildForms
NeuesFormular.Show
Möchten Sie ein Formular nur einmal anzeigen und keine weiteren Vorlagen (Instanzen) erlauben:
Form1.Show
 

 Das erste MDI-Formular

Bevor Sie beginnen, überlegen Sie nocheinmal, ob Ihre Anwendung überhaupt mit einem MDI-Formular realisiert werden soll. Folgende Gründ sprechen für eine MDI-Anwendung:

Es sollen mehrere Dokumente (Childforms) gleichzeitig angezeigt werden.
Sie brauchen mehrere Fenster mit unterschiedlichen Daten aber mit Zugriff auf die gleichen Menübefehle.
Sie wollen auch auf die gleiche Symbolleiste zugreifen

Gedanken zum Entwurf:

Überlegen Sie, welche Menübefehle von den Formularen gemeinsam genutzt werden können. Beispielsweise haben Sie eine Datenbankanwendung mit einem Fenster "Kunden" und einem Fenster "Rechnungen". Sie wollen nun die Daten sortieren. Dazu bietet es sich an, einen gemeinsamen Menübefehl "Sortieren" zu erstellen.

Die Befehle "Ausschneiden, Kopieren, Einfügen, Alles Markieren" werden zwar von manchen Steuerelementen direkt unterstützt, sollten jedoch nicht in einer MDI-Anwendung fehlen.

Ausserdem sollten Sie auch andere Steuerelemente wie das CommonDialog in das MDI einfügen und für alle untergeordneten Formulare nutzbar machen.

Die Menüs sind sinnvollerweise nur im MDI-Formular untergebracht. Dies hat seinen Grund: Sie brauchen ein Menü nur einmal zu erstellen, der Umgang, die Befehle sind für jedes Child-Form gleich.

Binden Sie trotzdem Menüs in ein ChildForm ein, werden die Menüs im MDI nicht mehr angezeigt.

Das erste Projekt:

  Starten Sie ein neues Projekt (Standard-EXE)
  Löschen Sie Form1 und fügen Sie ein neues MDI-Formular hinzu.
  Wählen Sie dieses MDI-Formular als "Startformular" aus.
       (Wollen Sie einen Splashscreen, wählen Sie ein anderes Formular)
  Fügen Sie nun dem MDI-Formular Ihre Menüs, Symbolleisten und evtl Statusleisten hinzu.
  Falls Sie einen Dialog zum Speichern, Öffnen, etc. benötigen, fügen Sie das CommonDialog-Control hinzu.


 

 Das Child-Form (untergeordnetes Anzeigefenster)

Fügen Sie dem bestehenden Projekt (momentan existiert nur das MDI-Form) ein neues leeres Formular hinzu (Form1). Plazieren Sie auf diesem eine Textbox, Multiline=True. Damit die Textbox der Größe des Formulars angepasst wird, könnte der Code im Resize-Ereignis so aussehen:
Private Sub Form_Resize()
    Text1.Move 0, 0, Me.Scalewidth, Me.Scaleheight
End Sub
Nicht zu vergessen, dass die Eigenschaft "MDIChild" auf True gesetzt wird. Andernfalls wird unser Formular nicht als untergeordnetes Fenster erkannt.


 

 Menücode implementieren

Fügen Sie dem MDI-Formular drei Menüpunkte hinzu:
Menü Kopieren     (mnuCopy)
Menü Ausschneiden (mnuCut)
Menü Einfügen     (mnuPaste)
Der Code für dieses Menüs:
Private Sub mnuCopy_Click()
  If TypeOf ActiveForm.ActiveControl Is TextBox Then
   Clipboard.SetText ActiveForm.ActiveControl.SelText
  End If
End Sub

Private Sub mnuCut_Click()
  If TypeOf ActiveForm.ActiveControl Is TextBox Then
    Clipboard.SetText ActiveForm.ActiveControl.SelText
    ActiveForm.ActiveControl.SelText = ""
  End If
End Sub

Private Sub mnuPaste_Click()
  If TypeOf ActiveForm.ActiveControl Is TextBox Then
    ActiveForm.ActiveControl.SelText = Clipboard.GetText
  End If
End Sub
Immer wenn Sie auf einen Menüpunkt klicken, wird die Textbox des gerade aktiven Fenster herangezogen. Ein Beweis für die Verwaltungsfähigkeit des MDI-Formulars.

Anmerkung: Natürlich unterstützt die Textbox bereits die Befehle Cut, Copy, Paste. Es soll nur als Beispiel für andere Steuerelemente dienen (zB RTF).

 

 Öffnen und Speichern

Wenn Sie beispielsweise einen Texteditor (wie in unserem Beispiel) schreiben wollen, müssen Sie auch dafür sorgen, dass die Textdateien geöffnet und gespeichert werden können.

Dazu verwenden Sie am besten das Commondialog-Control (Im Beispiel ComDialog).

Der Code für das Öffnen von Textdateien wird im MDI-Formular untergebracht:
Private Sub mnuOpen_Click()
On Error GoTo fehler
ComDialog.DialogTitle = "Öffnen"
ComDialog.CancelError = True
ComDialog.Filter = "Textdateien (*.txt)|*.txt"
ComDialog.FilterIndex = 1
ComDialog.ShowOpen
Dim newf As New MDIChild
newf.Caption = ComDialog.FileTitle 'oder .FileName

Open ComDialog.FileName For Input As #1
  Do While Not EOF(1)
    Line Input #1, textinhalt
    newf.Text1.Text = newf.Text1.Text & textinhalt & vbCrLf
  Loop
' Hier müsste noch das letzte vbcrlf abgeschnitten werden...

Close #1

newf.Show
fehler:

End Sub
Wollen Sie nun einen Text speichern, müssen Sie herausfinden, zu welchem der gerade geöffneten Fenster denn nun der Speichervorgang gehört ?

Der Code im MDI-Formular:
Private Sub mnuSave_Click()
  ActiveForm.Speichern
End Sub
Der Code im untergeordneten Child:
Public Sub Speichern()
On Error GoTo fehler
MDIParent.ComDialog.DialogTitle = "Speichern"
MDIParent.ComDialog.CancelError = True
MDIParent.ComDialog.Filter = "Textdateien (*.txt)|*.txt"
MDIParent.ComDialog.FilterIndex = 1
MDIParent.ComDialog.ShowSave

  Open MDIParent.ComDialog.FileName For Output As #1
    Print #1, Text1.Text
  Close #1

fehler:
End Sub
Achten Sie darauf, dass diese Prozedur als "PUBLIC" deklariert ist !
 

 Zusammenfassung

Dieses Tutorial sollte Ihnen die Grundlagen von MDI-Formularen vermitteln. Mit diesem Wissen können Sie einen kleinen MDI-Texteditor bauen. Allerdings sollten für einen ausgereiften Editor noch mehr Routinen eingebaut werden (Auswahlmöglichkeit der Schriftart, Schriftgröße, Fett, Unterstrichen, Kursiv; Speichern_unter, Anzeige der letzten vier bearbeiteten Dateien im Menü, Abfrage bei Änderungen vor dem Beenden, etc.)

Download  Beispielprojekt zum Download (3,71 KB)
Aktualisiert: 12.02.2008, 20:49 Uhr Copyright © 2001 - 2010 by ST-software Navigation zurück  |  Navigation vorwärts  |  Zum Seitenanfang     
Ihre IP: 38.107.191.80 ·  Seite erstellt in: 0.880 Sekunden ·  Dateigröße:  14751 Bytes