vb.net (2008) Het zojuist aangemaakt submenu aanvinken

Status
Niet open voor verdere reacties.

roppie555

Gebruiker
Lid geworden
18 dec 2007
Berichten
36
Allen,

Ik bouw een aantal submenu's op onder het menu-item: Languages. Het aantal wordt bepaald door het aantal aanwezige Taal-bestanden.
In het Register staat de Default taal. op het moment dat het submenu aangemaakt wordt dat overeen komt met de default taal dan wil ik dit item checken (vinkje zetten).
Dat laatste stukje lukt mij niet. Ik heb de volgende code tot nu toe:

Code:
       Dim sFile As String
        Dim selectedFolderPath As String
        Dim Talen() As String
        selectedFolderPath = "d:\data\pumptechnicsTCO\Help files\"
        sFile = Dir$([selectedFolderPath] & "\*.lang", vbDirectory Or vbHidden Or vbSystem Or vbReadOnly Or vbArchive)
        Dim AantalTalen As Integer = 1
        Do Until sFile = vbNullString
            If sFile <> "." Then
                If sFile <> ".." Then
                    ReDim Talen(AantalTalen)
                    Talen(AantalTalen) = sFile
                    'hier de menustrip maken
                    LanguagesToolStripMenuItem.DropDownItems.Add(Talen(AantalTalen).Substring(0, Talen(AantalTalen).Length - 5))
                    If Talen(AantalTalen).Substring(0, Talen(AantalTalen).Length - 5) = GetSetting("PumpTechnicsTCO", "Default", "Talen", "") Then
                        ' Hier een submenu in de toolstrip aangemaakt.
                        ' Als de naam overeen komt met de naam van de default naam die ik uit het register haal moet hij checked worden.
                        ' Op deze plek moet het net aangemaakte submenu ge-checked worden: .Checked = True 

                    End If
                    AantalTalen = AantalTalen + 1
                End If
            End If
            sFile = Dir$()
            AantalTalen = AantalTalen - 1
        Loop

Wie weet een oplossing?
 
Je gebruikt LanguagesToolStripMenuItem.DropDownItem.Add om een menuitem toe te voegen. Bovendien geef je een string op voor de dropdownitems. Op deze manier heb je niet meer de mogelijkheid om andere properties van het menuitem aan te roepen, waaronder dus de Checked property. Je zult een nieuwe ToolStripMenuItem instance moeten maken en die vervolgens aan je dropdown toevoegen, dan kan je wel de Checked property benaderen:

Code:
'ToolStripMenuItem instance maken
Dim tsmiLang As New ToolStripMenuItem

'Tekst van de tsmi opgeven
tsmiLang.Text = Talen(AantalTalen).Substring(0, Talen(AantalTalen).Length - 5)

'Controleren of de naam overeen komt met de default naam
If Talen(AantalTalen).Substring(0, Talen(AantalTalen).Length - 5) = GetSetting("PumpTechnicsTCO", "Default", "Talen", "") Then

'Komt de naam overeen, tsmi aanvinken
tsmiLang.Checked = True
End If

'tsmi toevoegen aan LanguagesToolStripMenuItem
LanguagesToolStripMenuItem.DropDownItems.Add(tsmiLang)
 
Mighty Atom,

Bedankt voor je snelle reactie. Ik heb de code als volgt aangepast:

Code:
        Dim tsmiLang As New ToolStripMenuItem
        Do Until sFile = vbNullString
            ReDim Talen(AantalTalen)
            Talen(AantalTalen) = sFile
            tsmiLang.Text = Talen(AantalTalen).Substring(0, Talen(AantalTalen).Length - 5)
            LanguagesToolStripMenuItem.DropDownItems.Add(tsmiLang)
            If Talen(AantalTalen).Substring(0, Talen(AantalTalen).Length - 5) = GetSetting("PumpTechnicsTCO", "Default", "Talen", "") Then
                tsmiLang.Checked = True
            End If
            AantalTalen = AantalTalen + 1
            sFile = Dir$()
        Loop

Er gebeurt nu het volgende:
Hij leest de talen in t.w.: Dansk, English, Nederlands. Dat is goed.
Dan maakt hij alleen Nederlands als menu-item aan en deze checked hij terwijl de default taal Engels is.
Bij het stap voor stap doorlopen komt hij wel op: LanguagesToolStripMenuItem.DropDownItems.Add(tsmiLang) en dan is de inhoud van tsmiLang wel correct maar hij maakt het item niet aan. Alleen voor het laatste item.
Zie jij zo waar dit fout gaat?
 
Je moet LanguagesToolStripMenuItem.DropDownItems.Add(tsmiLang) als laatste uitvoeren. Nu voeg je tsmiLang al toe voordat er gechecked word of de taal overeen komt.
 
Dat geeft het zelfde effect. Misschien heb ik het gewenste resultaat niet goed uitgelegd.
De opzet is dat als er 3 taal bestanden zijn er ook 3 menu-items worden aangemaakt.
Als in het register staat dat taal x de default taal is moet deze aangevinkt zijn.
In mijn voorbeeld:
Danks
v English
Nederlands
 
Laatst bewerkt door een moderator:
Maar waar zijn AantalTalen = AantalTalen + 1 en ReDim Talen(AantalTalen) dan voor?
Als het gewoon losse bestanden zijn in een folder, kan je dan niet gewoon beter door die bestanden loopen, de bestandsnamen in een nieuwe tsmi stoppen en ondertussen checken of ze overeen komen met de default?
Of moet je daadwerkelijk die taal bestanden inlezen om te zien welke taal ze zijn voordat je ze toevoegt in je tsmi?
 
Maar waar zijn AantalTalen = AantalTalen + 1 en ReDim Talen(AantalTalen) dan voor?
Als het gewoon losse bestanden zijn in een folder, kan je dan niet gewoon beter door die bestanden loopen, de bestandsnamen in een nieuwe tsmi stoppen en ondertussen checken of ze overeen komen met de default?
Of moet je daadwerkelijk die taal bestanden inlezen om te zien welke taal ze zijn voordat je ze toevoegt in je tsmi?

Ik hoef ze niet door te lopen. Ik moet alleen de menu-items aanmaken en een vinkje zetten bij de default-taal.
Is dat klaar dan lees ik vervolgens de default-taal in. In dit stadium kan de teller wat mij betreft vervallen.
p.s. ik ga voor 2 dagen weg dus ik reageer dinsdag weer op je antwoord. Vast bedankt voor het meedenken.

Rob
 
Dan moet je denk ik door de menuitems loopen en één voor één controleren of er eentje is die overeen komt met de default taal, pas dan check je hem.
Maar om eerlijk te zijn lijkt me dat niet handig, je kunt beter door alle talen loopen, voor elke taal een tsmi aanmaken, en voor elke taal controleren of er eentje overeen komt met de default taal. Volgens mij heb je dan dat hele teller gebeuren niet nodig, simpelweg zoiets (in pseudo code):

lijst_met_talen = een lijst met de beschikbare talen
default_taal = nl

Voor elke taal in lijst_met_talen
tsmi maken
if lijst_met_talen(index) = default_taal then
tsmi.checked = true
end if
tsmi.dropdownitems.add(tsmi)

Tenzij je natuurlijk de tsmi's al in designtime hebt toevoegt. Dan kan je door de taal tsmi's loopen en voor elke tsmi controleren of er eentje overeen komt met de default taal, en vervolgend aanvinken. Maar als ik het me goed herinner, werkt dit niet altijd omdat je alsnog een nieuwe tsmi instance moet maken.
 
Ik heb het opgelost met een gevulde Combobox i.p.v. de menu-items. Uitzoeken over het afvangen van het click-event kost me ook te veel tijd momenteel. Als ik wat meer tijd heb pak ik het menu-item issue weer op. Voor als nog werkt het nu goed.

Bedankt voor het meedenken en de tijd die je er in gestoken heb.

Rob
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan