![]() |
[vb6] Werken met menu's
Hey
Ik moe nu stage lopen en moet hier werken met vb6 Ik weet nie of er iemand bekent mee is op dit forum, maar ik probeer het gewoon... Ik moet voor mn opdracht een menu creeren en daarbij werken met de index ervan.. Alleen zodra ik de index een waarde geeft en ik zet de code bij form_load om die menu uit te schakelen dan doet hij dat niet. Hij doet da wel als ik geen index waarde opgeeft.. :S:S Iemand? iig bedankt |
Wat bedoel je precies (met 'menu uitschakelen') ?
Ik heb net ff twee menu items aangemaakt in VB6, allebei met dezelfde naam (mnuItem), alleen de eerste index 0 en de andere index 1 in Form_Load kan ik gewoon mnuItem(0).Enabled=false doen, of mnuItem(1).Enabled=false? |
Ten eerste bedankt voor je antwoord.
Je hebt me al een beetje op weg geholpen :) Ik werk met een MDI Form. Het uitschakelen (visible = false) is gelukt (dit doe ik bij het parent MDI tijden Load). Alleen nu wil ik via een form (als ik op een button klik, juist inlog) dat die menu weer zichtbaar wordt. Hiervoor had ik deze code: MDIForm1.mnuEdit(1).visible = true of mnuEdit(1).visible = true Alleen dit werkt niet, weet jij mss een oplossing? Voor de duidelijkheid, ik wil geen menus in de forms, alleen in de parent child. Waar ik net niet uitkwam was omdat ik de index waarde vergat. Ik heb nog nooit met menus gewerkt en index waarden, dus vandaar.. EDIT: IK BEN ER AL UIT, IK WAS EEN TEKEN VERGETEN IN DE NAAM VD MENU Alvast bedankt |
Maar misschien dat je me met andere kunt helpen. Ik nog n vrij redelijke n00p in vb6
Ik kab bijv. al helemaal niet overweg met arrays. Ik weet een beetje hoe je ze aan kan maken, maar zou echt niet weten wat ik eraan heb. Ik weet ook niet hoe je die dingen kan vullen met variablen. Nu heb ik al erg veel op internet gezocht, maar ik kom er nog steeds niet uit. (Gisteren heb ik niets anders gedaan dan heel de dag zitten pielen met arrays. Ik moe stage lopen en moet met arrays overweg kunnen, dus vandaar) Bedankt, Martijn |
Arrays?
Arrays is ongeveer hetzelfde als wat je deed met dat menu en die index. Ik neem aan dat je al wel wat weet van variables, Integers, Strings, Longs enzo. Arrays zijn oa. gewoon lijsten van die waardes. bv. je doet Dim stSampleString as String Heb je een string variable, die je simpelweg kan vullen door stSampleString = "Hello world" te doen. Dim stSampleString(0 to 10) as String Heb je een array van string variables. Je kan die dan vullen door simpelweg stSampleString(0) = "Hello World" te doen, of stSampleString(6) = "This is the seventh spot in the array" .. Het voordeel van arrays kom je vanzelf wel tegen; t'is heel handig, wil je lijsten oid. op slaan. Stel je voor dat je bv. een lijst van namen wil bij houden. Je zou zoiets belachelijks als Dim stName01 as String, stName02 as String, stName03 as String, stName04 as String kunnen doen; maar het is zo aflexibel als de pest en je krijgt gigantische slordige en onbeheerbare code. Dim stName(0 to 3) as String is veel beter. Wil je bv. met al die namen iets doen, kan je ze nu simpel in een FOR .. NEXT loop stoppen For iCount = 0 to 3 stName(iCount) = UCase(stName(iCount)) Next iCount Om ze bv. allevier tegelijk in upper case te zetten. etc, etc. |
Ja wat je me nu heb uitgelegd, dat snapte ik al wel redelijk. Maar iig thnx :)
Maar hoe kan je arrays vullen met variabelen? En kan je arrays ook aanmaken zonder dat je aangeeft hoeveel waarden er in die array komen?Want nu geef je aan: dim DezeArray(5) as string Hierin kunnen dus 6 waarden, maar stel nou dat ik tijdens een programma dingen aan de gebruiker vraagt die in een array opgeslagen moeten worden, maar niet weet hoeveel waarden er in die array moeten komen. Ik noem maar wat heel simpels: Een programma vraagt de naam en stopt deze namen in een array. Hij vraagt je naam en jij voert die naam in en daarna vraagt hij of je nog n naam wil toevoegen. Tot jij op een gegeven moment op 'nee' klikt. Ik hoop dat je snap wat ik een beetj bedoel Martijn |
Juh,
Over dat naam voorbeeld; je dimensioneert je Names array boven al je Functies (zodat de array in al die functies van het form beschikbaar zijn) alsvolgt: Dim stNames() as String Dus zonder een nummer tussen de haakjes. Zodra je dan een Naam erin wil stoppen, doe je het volgende: Redim Preserve stNames(0) of Redim Preserve stNames(10) Ligt er aan hoe ver je bent he? In principe zal je dan ook gebruik willen maken van ubound en lbound; die vertellen hoe groot je array is. Dan krijg je dus zoiets als .. Redim Preserve stNames(ubound(stNames) + 1) om je array met 1 te vergroten. ubound(stNames) geeft dus de upperbound terug van je array. (en lbound je lower bound .. sinds je bv ook Dim stNames(10 to 20) kan doen) Dus bij Dim stNames(10 to 20) geeft je lbound(stNames) 10 terug, en je ubound(stNames) 20 .. Wat je precies bedoelt met je array vullen met variables begrijp ik niet?!? Dim stName as String Dim stNameList(10) as String stNameList(6) = stName ?? Zo stop je in stNameList(6) de waarde van stName? Of als je een textbox op het scherm hebt genaamt txtName: stNameList(6) = txtName.text |
Wat je als laatste uitlegte over variabelen in arrays, dat bedoelde ik ook :) Thnx :)
Maar dat redim gebeuren snap ik niet, naja ik zie het nut er niet van in. Ik zal proberen te zeggen wat ik nie snap... je dimensioneert een array: dim mijnArray() as string Okay tot zover snap ik het. Maar dan krijg je dat redim, wat is nou het nut daarvan?Als je Redim Preserve stNames(10) doet, dan kan je toch net zo goed bij het declareren van mijnArray() de waarde 10 opgeven? Zo dus: dim mijnArray(10) as string Dat komt toch op hetzelfde neer?Dit zal ongetwijfeld aan mij liggen, maar mss dat jij mij dit kan uitleggen? Lbound en Ubound tellen, zoals ik het opvat, hoeveel er in de array zit. Lbound telt van boven naar beneden en Ubound van onder naar boven Verbeter me als ik het verkeerd zeg, zo interpreteer ik het... |
Als je
Dim MyArray(10) as String doet .. .. word er alvast ruimte gereserveerd voor dat array. Voor kleine lijsten maakt dat niks uit, maar het kan best voorkomen dat je met gigantische arrays wilt werken .. Dim MyArray(30000) as String .. vooral als er data in staat of je gebruik maakt van types, wil dat wel aardig wat geheugen opvreten. Stel je voor Type PersonalDataType Name as String * 64 Address as String * 256 Phone as String * 16 End Type Dim Users(10000) as PersonalDataType .. dan gaat VB bij voorbaat al 10000x(64 + 256 + 16) bytes reserveren. Behoorlijk wat, en behoorlijk zonde als je uiteindelijk maar 3 users opslaat. :) Daarnaast is het extra handig als je idd. niet bij voorhand weet bv. hoeveel namen je erin gaat zetten. Kan je idd wel Dim Names(10) doen, maar wat ineens als je 12 namen wil opslaan? LBound en UBound telt niks; ze geven gewoon terug welke minimale en maximale index je kan gebruiken. Als je Dim stNames(10 to 20) doet (voor welke onzinnige reden ook) kan je dus geen waarde toekennen aan stNames(9) of aan stNames(21) .. LBound geeft 10 terug, UBound geeft 20 terug. Of Dim iValues(3 to 14) .. lbound(iValues) is dan 3 en ubound(iValues) is dan 14 .. Practische dingen; tja, nu zou je er geen kunnen bedenken, maar als je eenmaal bezig bent met iets complex .. |
Citaat:
Het nut van l-U Bound snap ik niet. Ik bedoel wat heb je eraan?Dat snap ik niet, ze geven de minimale en de maximale index terug. Wat kan je daar mee dan? |
Citaat:
Of het de 10e naam of de 11e naam of de 12e naam is, weet je op dat moment niet, mits je een teller bij houd. Maar stel dat je het niet weet; dus dat het Names(x) is maar Names(x) is te klein voor die extra naam; je hebt Names(x + 1) nodig. Dan wil je kunnen opvragen hoe groot de array op dat moment is. Dat doe je dan met ubound(). Als je dan weet hoe groot je de array wilt hebben, gebruik je Redim Preserve om de array groter te maken, en kan je eindelijk je 11e naam in het array kwijt. |
Voorbeeld code
Code:
' Option Base 1 zegt, dat standaard 1 de lbound is van arrays die we dimensioneren. |
Code:
Private Sub cmdresult1_Click() |
je moet het zo doen:
Dim names() As String ReDim Preserve names(2) niet zoals jij hebt: Dim names(2) As String |
Je moet boven al je code (Dus ook boven Private Sub cmdresult1_Click() )
Dim names() As String zetten En Dim names(2) As String aan het begin, moet je Redim names(2) van maken. |
ik was eerder :P
|
Citaat:
- Moet je altijd in het general declarations gedeelte dim array() as datatype neergooien als je met deze soort array gaat werken?En dan ook zonder waarde? - Waarom moet dat? - Waarom moet je, voordat je met die array gaat werken, redim array(aantal) neerzetten? Dit was het denk ik wel, als er iets niet lukt dan hoor je het wel...:P |
Lekker jongens... public vars... :rolleyes:
|
Citaat:
|
Citaat:
|
Citaat:
- Moet je altijd in het general declarations gedeelte dim array() as datatype neergooien als je met deze soort array gaat werken?En dan ook zonder waarde? Nee hoor; je mag het ook in de functie zelf doen, alleen dan verlies je het array plus de inhoud, zodra de functie afgelopen is. Als je het in het general declarations gedeelte doet, behoud je het en kan je het ook in andere functies gebruiken. (En als er nu weer een of andere wijsneuzerige irritante *** met Object Orientated achtige dingen gaat smijten en stomme dingen gaat roepen :mad: :mad: Ik *haat* van die wijsneuzerige cowboys) - Waarom moet dat? Zie vorige tekst :p In principe zal je niet een names lijst gelijk weer weg willen gooien zodra je ze net toegevoegd hebt :p - Waarom moet je, voordat je met die array gaat werken, redim array(aantal) neerzetten? In principe moet je gewoon als eerste Dim MyArray() as String doen, maar dan is die nog leeg, en functies zoals ubound en lbound gaan de mist in. Daarom dat je dan gelijk zoiets als Redim MyArray(0) moet doen, wil je niet dat die crasht bij lbound/ubound dingen. Maar je kan het ook allemaal zelf uitproberen he :p Ik probeer het ook telkens beetje uit in VB hiero :p |
Bedankt voor je uitleg :D Het begint allemaal n beetje te dagen :D
Alleen ik zit nu weer met het volgende. Hoe kan je erachter komen wat het hoogste is in deze regel: MDIForm1.mnubestand(1) Zoals je mss ziet gaat het hier om een menu. Ik heb 4x mnubestand en de index loopt van 1 t/m 4. Alleen nu wil ik vb6 er zelf achter laten komen wat de hoogste waarde is. Ubound(MDIForm1.mnubestand) ^ Dit werkt niet, en als ik dit doe in MDIForm1: Ubound(mnubestand) doet hij dat ook niet. Ik snap het niet. mnubestand is toch een array? Hij zegt namelijk dat er in ubound geen array zit :S Weten jullie mss een oplossing? Alvast bedankt |
het probleem zit er in dat mnubestand geen array is, maar een collection
daarom moet je MDIForm1.mnubestand.UBound gebruiken |
Citaat:
Bedankt alvast |
Citaat:
Citaat:
|
OKay....
En kan je mij een voorbeeld geven wanneer je zoiets gebruikt? |
Alle tijden zijn GMT +1. Het is nu 00:08. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.