Archief - visual basic probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

hanie

Legacy Member
hoe kan ik ervoor zorgen dat een foto in een picturebox verandert door erop te klikken? dus ik heb 3 fotootjes en wil die achtereenvolgens laten zien door erop te klikken. om 1 of andere reden lukt me dit met achtergrondkleuren door select case te gebruiken maar met die fotootjes lukt het niet..

Japy

Legacy Member
tellerke maken, als teller 1 is die foto als teller 2 is die foto etc ...

Exit

Legacy Member
klik op foto 1 => hide foto1 en show foto 2 .. enzo verder ....

hanie

Legacy Member
lukt me niet...
zo ziet men code eruit van de foto 's die ik moet laden
picfoto3.Picture = LoadPicture(App.Path & "\fotoos\hand.jpg")
ik kan er geen show of hide commando bij even.

met de teller lukt het vreemd genoeg ook niet, enkel de eerste foto kan ik laten verschijnen. bij de volgende klik gebeurt er niks meer.

hanie

Legacy Member
Dim teller As Byte

teller = teller + 1

If teller = 1 Then
picfoto3.Picture = LoadPicture(App.Path & "\fotoos\hand.jpg")
ElseIf teller = 2 Then
picfoto3.Picture = LoadPicture(App.Path & "\fotoos\vuist.jpg")
ElseIf teller = 3 Then
picfoto3.Picture = LoadPicture(App.Path & "\fotoos\schaar.jpg")
ElseIf teller = 4 Then
teller = 1
End If


met deze code krijg ik dus enkel de eerste foto te zien

Cakeman

Legacy Member
Dat is omdat je teller elke keer opnieuw geïnitialiseerd wordt. Elke keer je op die knop klikt, wordt je teller op 0 gezet en dan met 1 verhoogd.

Wat je moet doen is met een globale, module of statische variabele werken.
Statische variabelen zijn iets overzichtelijker maar ik heb gelezen dat ze iets trager werken dan module variabelen.

Het komt er dus op neer dat je die declaratie (Dim teller as Byte) aan het begin van je code, buiten alle procedures en functies, moet zetten.

hanie

Legacy Member
dankjewel, dat was inderdaad het probleem. toch al 1 ding waar ik me niet meer druk in moet maken :)

thx voor al de hulp

Cakeman

Legacy Member
Wat je ook kan doen is een array van strings maken, met daarin de padnamen van je foto's. Op die manier kan je zonder veel werk zoveel foto's toevoegen als je wil:

Code:
Dim astrPicture(0 To 4) as String
Dim intTeller as Integer

intTeller = 0

astrPicture(0) = App.Path & "foto1.jpg"
astrPicture(1) = App.Path & "appel.jpg"
astrPicture(2) = App.Path & "boom.jpg"
astrPicture(3) = App.Path & "bloem.jpg"
astrPicture(4) = App.Path & "zwijn.jpg"

Private Sub btnChanger_OnClick
  picfoto3.Picture = LoadPicture(astrPicture(intTeller))
  intTeller = intTeller + 1
  If intTeller > UBound(astrPicture) Then
    intTeller = 0
  End If
End Sub

Ik ben niet 100% zeker van de syntax. Visual Basic 6 staat hier niet geïnstalleerd en ik heb al lang geen VB6 meer gebruikt. Maar je snapt de manier van werken wel, niet?

hanie

Legacy Member
ja da zou wel is kunnen kloppen, maar tgaat maar over 3 fotootjes dus een array zalk ni nodig hebben.

maar nu je er toch over begint, ik moet voor een taak voor school een woord opslaan in een array en het dan door op een knop te klikken door elkaar geschud weergeven in een text box. Alles lukt me behalve het door elkaar schudden. enig idee hoe ik dit kan oplossen?

Cakeman

Legacy Member
Je genereert een random getal tussen de lower en upper limit van je array. Gaat je array van 1 tot en met 8, moet je dus een getal tussen 0 en 9 hebben.

Vervolgens houd je bij welke letter al geweest is. Bijvoorbeeld in een extra Boolean array.

hanie

Legacy Member
ik krijg steeds een error: visual basic script out of range

dim woord(1to10) as variant
dim teller as byte

code om een woord van 10 letters in te geven:
For teller = 1 To 10
'inputbox om letter per letter in te geven
woord(teller) = InputBox("Geef een letter in", "woord ingeven max 10 letters", "")
next

men code om door elkaar te schudden:
dim t as byte

For t = 1 To 10
mix = Int(woord(t11) - woord(t0) + 1) * Rnd + woord(t0)
boodschap = mix & boodschap & ""
Next

txtopgave.Text = boodschap


enig idee wat ik verkeerd doe?

Cakeman

Legacy Member
Code:
mix = Int(woord(t11) - woord(t0) + 1) * Rnd + woord(t0)
Wat is woord(t11)?
Tussen die haakjes moet een getalwaarde komen...

hanie

Legacy Member
ik dacht dat dat erbij moest. maar kheb het verandert in een cijfer en nu geeft hij een fout in de regel:
mix = Int(woord(11) - woord(0) + 1) * Rnd + woord(0)
fout= type mismatch
(woord (1to10) is de array waar ik men 10 letters in opgeslagen had)

Cakeman

Legacy Member
In de array zitten dus letters en die wil jij van elkaar aftrekken en er eentje bij optellen.
Code:
'abln is een module variabele
Dim ablnKeuzes(LBound(woord) To UBound(woord)) as Boolean

Dim intGekozen as Integer
intGekozen = Int(UBound(woord) - LBound(woord) + 1 * Rnd + LBound(woord))
If Not ablnKeuzes(intGekozen) Then
  mix = mix + woord(intGekozen)
End If
ablnKeuzes(intGekozen) = True

Dit kan allemaal veel mooier. Once again, VB6 is niet installed :)

hanie

Legacy Member
compile error: constant expression required. en als ik dan op ok druk springt het naar mijn code en is ubound gehighlight bij dim. ik heb zelf nog niet met u of lbound gewerkt dus weet ni echt wa ermee aan te vangen. alleszins bedankt voor je hulp tot nu toe :bow: heel men vb taak is af behalve die f#cking door elkaar opdracht :doh:

Cakeman

Legacy Member
LBound en UBound geven respectievelijk weer op wat de begin- en eindindexen van een array zijn.

Code:
Dim mijnArray(1 To 5) as Integer
Dim nogEenArray(3 To 9) as Integer

Debug.Print LBound(mijnArray)
Debug.Print UBound(mijnArray)
Debug.Print LBound(nogEenArray)
Debug.Print UBound(nogEenArray)
Dit zal als output het volgende geven:
1
5
3
9

Die foutmelding die je nu kruigt wil blijkbaar zeggen dat je geen variabelen mag gebruiken om een array te definiëren.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan