Ich habe meine "eigene" kleine Klasse geschrieben, mit der ich ein MDIpanel habe, dass in einem Panel "sitzt".
Hier mal ein Video: youtube.com/watch?v=8wAkWmJvu7Y
Wenn ich das Panel einfüge und die Fehler weg klicke ist alles kein Problem und wenn ich das Panel ganz oft einfügen kommt der Fehler auch nicht mehr...
Aber der Fehler kommt immer noch wenn ich das Projekt z.B. speichern will
Die Kommentare hab ich eigentlich eher aus Langeweile hinzugefügt, diese also nicht allzu ernst nehmen
Hier die Klasse:
MfG
Hier mal ein Video: youtube.com/watch?v=8wAkWmJvu7Y
Wenn ich das Panel einfüge und die Fehler weg klicke ist alles kein Problem und wenn ich das Panel ganz oft einfügen kommt der Fehler auch nicht mehr...
Aber der Fehler kommt immer noch wenn ich das Projekt z.B. speichern will
Die Kommentare hab ich eigentlich eher aus Langeweile hinzugefügt, diese also nicht allzu ernst nehmen
Hier die Klasse:
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Class MDIPanel
- Inherits System.Windows.Forms.Panel 'Wir erben vom Panel, damit wir die Form (die ihm untergeordnet wird) einfach
- 'in der Hautpform( z.B. Form1) herumschieben können
- Private _forms As New List(Of Form) 'Einfache Liste zum Hinzufügen/Entfernen von Formen
- Public Property forms As List(Of Form)
- Get
- Return _forms
- End Get
- Set(ByVal value As List(Of Form))
- _forms = value
- End Set
- End Property
- Private MDIForm As New Form 'Wir benutzen den MDIContainer. Man kann natürlich auch das Panel selbst verwenden
- 'mit dieser Variante haben wir aber den Vorteil von Skrollbalken
- Public ReadOnly Property getMDIForm As Form 'Zum lesen von Informationen über die MDIForm, eigentlich kann man diesen Teil auch
- Get 'weglassen
- Return MDIForm
- End Get
- End Property
- <DllImport("user32.dll")> _
- Private Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
- End Function 'Besser als Me(dem Panel).Controls.Add(Form zum hinzufügen)
- 'Code wird zum einfachen unter/überordnen von Handeln(Formen, Controls, usw.) benutzt
- Sub New()
- MDIForm = New Form 'Neue Instanz erstellen
- MDIForm.IsMdiContainer = True 'Form als MdiContainer setzten
- MDIForm.StartPosition = FormStartPosition.Manual 'Muss man aktivieren, damit man die Position vor Start ändern kann
- MDIForm.Location = New Point(1, 1) 'Position anpassen
- MDIForm.Size = New Size(Me.Size.Width + 1, Me.Size.Height + 1) 'Größe anpassen
- MDIForm.FormBorderStyle = FormBorderStyle.None 'Damit man die Form nicht bewegen kann
- SetParent(MDIForm.Handle, Me.Handle) 'Me.Controls.Add geht nicht, da eine Form nicht MdiContainer und Control(toplevel = false) gleichzeitig seien kann
- MDIForm.Show() 'Form erstellen und anzeigen
- End Sub
- Public Sub addForm(ByVal form As Form)
- If form.IsDisposed = True Then 'Falls eine Form, die bereits entfernt bzw. für den RAM , mit .Dipose, freigeben wurde
- Return 'versucht wird hinzuzufügen wird abgebrochen
- End If
- form.MdiParent = MDIForm 'Der MDIForm unterstellen
- form.Show() 'Form anzeigen
- forms.Add(form) 'Und die Form zur Liste hinzufügen
- End Sub
- Public Sub removeForm(ByVal form As Form)
- form.Close() 'Form schließen
- form.Dispose() 'Speicher freigeben
- forms.Remove(form) 'Form von Liste entfernen
- End Sub
- Private Sub MDIPanel_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
- MDIForm.Size = New Size(Me.Size.Width + 1, Me.Size.Height + 1) 'Größe der MDIForm der des Panels(me) anpassen
- End Sub
- End Class
MfG