PDA

Volledige versie bekijken : visual basic probleem



hanie
16 mei 2005, 22:58
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
17 mei 2005, 12:20
tellerke maken, als teller 1 is die foto als teller 2 is die foto etc ...

hanie
17 mei 2005, 16:33
thx, alsk thuis ben gaank da direct probere.

Exit
17 mei 2005, 19:18
klik op foto 1 => hide foto1 en show foto 2 .. enzo verder ....

hanie
17 mei 2005, 20:56
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.

Cakeman
17 mei 2005, 21:16
Laat eens de code van het Click event van je knop zien...

hanie
17 mei 2005, 21:49
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
17 mei 2005, 21:53
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
17 mei 2005, 22:17
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
17 mei 2005, 22:26
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:



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
17 mei 2005, 23:28
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
18 mei 2005, 10:55
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
18 mei 2005, 15:59
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
18 mei 2005, 18:04
mix = Int(woord(t11) - woord(t0) + 1) * Rnd + woord(t0)
Wat is woord(t11)?
Tussen die haakjes moet een getalwaarde komen...

hanie
18 mei 2005, 18:23
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
18 mei 2005, 19:13
In de array zitten dus letters en die wil jij van elkaar aftrekken en er eentje bij optellen.


'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
18 mei 2005, 22:26
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
18 mei 2005, 22:50
LBound en UBound geven respectievelijk weer op wat de begin- en eindindexen van een array zijn.


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.

majonijntje
19 mei 2005, 18:40
Tom, 'k wou da'k u kon helpen!

soon mss :p