Toon posts:

[VB.NET] al geopend mdi child vinden

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een mdi form en enkele mdi children. deze worden vanuit een menu geopent alleen zodra er al 1 geopend is moet gecontroleerd worden of deze al in de container staat ( anders opent hij het mdi child 2 X)

de code die ik heb ziet er als volgt uit.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
    Public Sub BekijkOfActive(ByVal formulier As String)
        Dim x As Integer
        Dim Main As frmMain
        For x = 0 To Main.MdiChildren.Length - 1
            If Main.ActiveForm.Name = formulier Then
                blnBestaat = True
                Exit Sub
            End If
        Next
        blnBestaat = False
    End Sub


ik heb op google gezocht en in help in vb.net maar heb het niet kunnen vinden. zou wel een tipje kunnen gebruiken.

Hij gaat fout op dit stukje code:

Visual Basic .NET:
1
        For x = 0 To Main.MdiChildren.Length - 1


met de volgende error

An unhandled exception of type 'System.NullReferenceException' occurred in Blabla.exe

Additional information: Object reference not set to an instance of an object.

[ Voor 17% gewijzigd door Verwijderd op 11-03-2004 20:28 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Wat is
Dim Main As frmMain

:? Dit is geen enkele reference naar iets; is nothing, dus knalt hij er hier uit. Je geeft een type aan, maar maakt er geen instantie van.

ergo: frmMain is een niet geinstanieerde class en hij kan hier dus niets mee. Je zult een reference moeten maken naar je eigenlijke frmClass

[ Voor 30% gewijzigd door gorgi_19 op 11-03-2004 20:46 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik heb het antwoord gevonden. Voor de mensen die er belang bij hebben hier het antwoord.

in een module heb ik het volgende gemaakt

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
    Public Class laMain
        Private Shared Tempmain As frmMain
        Public Shared Property DefInstance() As frmMain
            Get
                Return Tempmain
            End Get
            Set(ByVal Value As frmMain)
                Tempmain = Value
            End Set
        End Property
    End Class


Daarna in het form waarnaar gereferred moet worden (in dit geval dus frmMain)

Visual Basic .NET:
1
        laMain.DefInstance = Me


en ten slotte het stukje code wat naar de childs kijkt:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
        Dim x As Integer

        For x = 0 To (laMain.DefInstance.MdiChildren.Length) - 1
            If laMain.DefInstance.MdiChildren(x).Name = formulier Then
                blnBestaat = True
                Exit Sub
            End If
        Next
        blnBestaat = False


Excuses hierbij voor mijn naamgeving die moet ik zelf nog verbeteren. ging er hoofdzakelijk om dat ik ff kon testen of het werkte bij mij.

kan nu weer verder gaan :*) :*)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Het kon ook makkelijker als je een reference naar de (main)form doorgaf aan die 'ControlChild' method ofzo.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Als je toch met die shared aan de gang gaat, gebruik dan gelijk een compleet Singleton pattern.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
dit is wat ik er zo over kon vinden .. en op zich is deze manier wel makkelijk want nu kan ik vanuit elke form dat ene form bereiken door gewoon lamain.definstance te gebruiken.
Pagina: 1