Leren met VB 6.0 EE.

Pagina: 1
Acties:
  • 122 views sinds 30-01-2008
  • Reageer

  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
Ik ben als proefprojectje een programma in VB aan het schrijven, om VB wat beter te leren kennen. Nu bestellen ze op mijn werk elke vrijdag Burger King, dus het leek me handig om daar een programma voor te schrijven. De bedoeling is dat ze met drop-down boxen kunnen kiezen uit de items, om die vervolgens toe te voegen aan een listbox, die na het drukken op de bestelknop word doorgestuurd naar een textbestand.

Het venster en layout heb ik al:

Afbeeldingslocatie: http://img160.exs.cx/img160/7038/bk8hc.jpg

Ik neem aan dat de strekking nu wel duidelijk is.

Het volgende:

Ik probeer een array aan te maken, en die geef ik 60 waardes mee, van 0 tot 60. Aan iedere waarde ken ik een produkt toe. Nu wil dat array Niet echt lukken. Ik heb een module aangemaakt met de code daarin.

Ik krijg de foutmelding "User Defined Type not Defined"

Code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Sub voedsel()
x As Integer
item As Integer


Dim x(60) As item   ' Contains 61 members, from x(0) to x(60).

' Instantiates each member of an array by using a loop.
Dim q As Integer
For q = 0 To 60
   x(q) = New item
Next

' Assigns a member of an array a reference to an existing object.
Dim myItem As New item
x(0) = "Hamburger"
x(1) = "Cheeseburger"
x(2) = "Dubbele Cheeseburger"
x(3) = "Dubbele Cheeseburger met Bacon"


etc.

Even voor de duidelijkheid, ik wil geen complete herschreven codes hebben, alleen genoeg hints om het zelf weer op te kunnen pakken, anders leer ik het nooit :)

[ Voor 4% gewijzigd door HTT-Thalan op 15-12-2004 10:47 ]


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Een paar hints:
- topics over programmeren horen in het forum PW ;)
- code maak je overzichtelijk op het forum mbv de [ code=vb] tags
- zet eens een breakpoint in vb en stap door de code heen om te kijken waar het fout gaat. (in code weergave op de linker grijze balk klikken, f5 en daarna f8 om door te stappen)
- [google="User Defined Type not Defined"] levert volgens mij ook wel het eea op ;)

kaart != map && bottel != fles
Wacht op antwoord


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
In VB werkt je niet op deze manier met objecten die je moet instantieren.

code:
1
2
3
4
5
Dim x(60) as String
x(0) = "Hamburger"
x(1) = "Cheeseburger
[..]
x(60) = "McChicken

Oops! Google Chrome could not find www.rijks%20museum.nl


  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
P_de_B schreef op woensdag 15 december 2004 @ 10:48:
In VB werkt je niet op deze manier met objecten die je moet instantieren.

code:
1
2
3
4
5
Dim x(60) as String
x(0) = "Hamburger"
x(1) = "Cheeseburger
[..]
x(60) = "McChicken
Ja, maar ik heb ongeveer 7 categorieen. Ik wil de 7 comboboxen elk een deel van die reeks laten weergeven. Dus combobox 2 geeft alle burgers (nummer 0 tot en met 14 bv) weer.

Ik ben op deze manier begonnen omdat ik dacht te hebben gelezen dat je met een datasource commando te combobox een bepaald deel van die lijst te kunnen laten weergeven. Ik heb met de methode die jij nu geeft toch geen array ? of wel?

[ Voor 23% gewijzigd door HTT-Thalan op 15-12-2004 10:52 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
HTT-Thalan schreef op woensdag 15 december 2004 @ 10:51:
[...]


Ja, maar ik heb ongeveer 7 categorieen. Ik wil de 7 comboboxen elk een deel van die reeks laten weergeven. Dus combobox 2 geeft alle burgers (nummer 0 tot en met 14 bv) weer.

Ik ben op deze manier begonnen omdat ik dacht te hebben gelezen dat je met een datasource commando te combobox een bepaald deel van die lijst te kunnen laten weergeven. Ik heb met de methode die jij nu geeft toch geen array ? of wel?
Dan moet je meerdere arrays maken? Waarom maak je trouwens niet even snel een databasje? Is het oon nog eenvoudiger aan te passen.

Zoiets:

Items
ItemId
ItemDescription
ItemCategory

Category
CategoryId
CategoryDescription

Oops! Google Chrome could not find www.rijks%20museum.nl


  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
P_de_B schreef op woensdag 15 december 2004 @ 10:55:
[...]


Dan moet je meerdere arrays maken? Waarom maak je trouwens niet even snel een databasje? Is het oon nog eenvoudiger aan te passen.

Zoiets:

Items
ItemId
ItemDescription
ItemCategory

Category
CategoryId
CategoryDescription
Klopt, maar zover was ik nog niet met leren, zeg maar :P

Ik vroeg me al af of het makkelijker is om de producten in de code te verwerken of een database te nemen, maar omdat het een relatief kleine code zou moeten worden, en de produkten hoeven in principe niet aangepast te worden, is het in de code zelf goed te doen. Het moet bovenal simpel en begrijpelijk lijken, dan kan ik de code altijd nog uitbreiden en mooier maken zodra ik meer geleerd heb.

  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
P_de_B schreef op woensdag 15 december 2004 @ 10:48:
In VB werkt je niet op deze manier met objecten die je moet instantieren.

code:
1
2
3
4
5
Dim x(60) as String
x(0) = "Hamburger"
x(1) = "Cheeseburger
[..]
x(60) = "McChicken
De code geeft nu iig geen foutmeldingen meer als ik hem run, maar nu moet ik dus elke combobox een range met producten toekennen, die ze weergeven als je hem openklikt. Dan kan ik aan het geselecteerde item uit die box weer een waarde (variabele) toekennen, en die gebruik om met additem toe te voegen aan de listbox in het midden, waar dan de volledige stringtext van het produkt tevoorschijn komt. Zo maak je dus dan een bestellijst, dacht ik.

  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
En toen was er helemaal niemand meer aanwezig met enige kennis van VB?

Hoe moet ik nu de verwijzingen naar de producten toekennen aan een bepaalde box? Zodat ze bij het klikken op het dropdown menu tevoorschijn komen en selecteerbaar zijn?

Verwijderd

Hier heb je iets om mee te testen:

Maak een form (Form1) en zet daar 3 comboboxen op bijv. Combo1, Combo2 en Combo3

Zet deze code in je Form1

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub Form_Load()
   Dim iFileNum As Integer
   Dim sProgDir As String
   Dim sFileName As String
   Dim sTextLine As String
   Dim oCB As ComboBox
   
   sProgDir = Trim(App.Path)
   If Right(sProgDir, 1) <> "\" Then
      sProgDir = sProgDir & "\"
   End If
   sFileName = "combo.ini"
   
   ' Reading sFileName
   iFileNum = FreeFile
   Open sProgDir & sFileName For Input Access Read As iFileNum
   Do While Not EOF(iFileNum) ' Loop until end of file.
      Line Input #iFileNum, sTextLine ' Read line into variable.
      If Left(sTextLine, 1) <> ";" And Left(sTextLine, 1) <> "" Then ' sla regels die beginnen met ; of leeg zijn over
         Select Case sTextLine
         Case "[combo1]"
            Set oCB = Form1.Combo1
         Case "[combo2]"
            Set oCB = Form1.Combo2
         Case "[combo3]"
            Set oCB = Form1.Combo3
         End Select
         If Left(sTextLine, 1) = "[" Then
            ' sla regels die met [ beginnen vanaf hier over
         Else
            With oCB
               oCB.AddItem sTextLine
            End With
         End If
      End If
      DoEvents
   Loop
   Close iFileNum ' Close file.
End Sub

Zet in dezelfde map waarin Form1 is opgeslagen het volgende tekst bestand met de naam combo.ini (uitbreiden naar behoefte)
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
; Vul combo boxen met bestellingen
[combo1]
HamBurger
CheeseBurger
Friet
[combo2]
Koffie
Cola
Sinas
Ranja
[combo3]
Choco Shake
Bananen Shake

[ Voor 6% gewijzigd door Verwijderd op 15-12-2004 12:20 ]


  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
Verwijderd schreef op woensdag 15 december 2004 @ 12:19:
Hier heb je iets om mee te testen:

Maak een form (Form1) en zet daar 3 comboboxen op bijv. Combo1, Combo2 en Combo3

Zet deze code in je Form1

(code enzo)
Top! Ik denk dat ik hiermee een stuk verder kom! En een ini is ook makkelijk toevoegen enzo. Ik ga nu eerst even zelf proberen een index uit de selecties te krijgen, om die toe te voegen aan de lijst.

  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
HTT-Thalan schreef op woensdag 15 december 2004 @ 12:37:
[...]


Top! Ik denk dat ik hiermee een stuk verder kom! En een ini is ook makkelijk toevoegen enzo. Ik ga nu eerst even zelf proberen een index uit de selecties te krijgen, om die toe te voegen aan de lijst.
Jouw code was in 1 keer goed, hoefde er niets meer aan te wijzigen behalve de namen.

Nu het volgende:

Ik ben al zover dat de items uit de combo's na het klikken op het plaatje, toegevoegd worden in het list1-vensters, oftewel de bestelling.

Nu bestaat de kans echter dat iemand een regel "niets" kiest, omdat hij geen shake wil, of geen kip. Dan word er dus wel een witregel toegevoegd in list1, terwijl dat niet nodig is. Verder heb ik een verwijderknop. Wanneer die gedrukt word, gebruik ik een listindex om dat item te verwijderen uit de lijst, maar wanneer ik niets aanklik en toch op verwijderen klik, krijg ik natuurlijk een error. Wat ik een makkelijke manier om dat te wijzingen? Ik heb al wat geprobeerd, maar ik mis iets denk ik.

Code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Command2_Click()

verw_item = List1.ListIndex


If verw_item = "" Then
MsgBox "Je moet wel iets selecteren om te verwijderen!", 0, "Fout!"
Else

verw_item = List1.ListIndex

controle = List1.ListCount
If controle > 0 Then
List1.RemoveItem (verw_item)
Else
MsgBox "Er is nog niets te verwijderen!", 0, "Fout!"
End If
End If

  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 04-03 17:36

CoRrRan

Don't Panic!!!

Als ik even mag inhaken op het probleem van de TS, voordat je in je fout terugvalt (zie comments in je code):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub voedsel() 
x As Integer 
item As Integer  '<-- Hier definieer je de variable "item" als een integer.

Dim x(60) As item  ' <-- Hier wil je de array-variabele "x" definieren
                   ' als een Datatype "item", en als je geen Datatype
                   ' "item" gecreeerd hebt, en dat heb je niet,
                   ' kan dit dus niet!!!

' Instantiates each member of an array by using a loop. 
Dim q As Integer 
For q = 0 To 60 
   x(q) = New item 
Next 

' Assigns a member of an array a reference to an existing object. 
Dim myItem As New item 
x(0) = "Hamburger" 
x(1) = "Cheeseburger" 
x(2) = "Dubbele Cheeseburger" 
x(3) = "Dubbele Cheeseburger met Bacon"
Om dus de fout aan te wijzen: je wilt een variabele definieren als een andere variabele. Dit kan niet aangezien VB altijd een variabele wil gedefinieerd zien als een Datatype (Byte, Integer, String, etc...) Je kunt wel custom datatype's maken, maar dan moet je in de een class creeeren en daarin je custom datatype aanmaken, die je daarna in je module (en forms) kunt aanroepen. Zoek via google maar eens hoe je dat doet, of pak een goed VB boek erbij.

Hopelijk heb je hier iets aan.

-- == Alta Alatis Patent == --


  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
CoRrRan schreef op woensdag 15 december 2004 @ 15:20:
Als ik even mag inhaken op het probleem van de TS, voordat je in je fout terugvalt (zie comments in je code):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub voedsel() 
x As Integer 
item As Integer  '<-- Hier definieer je de variable "item" als een integer.

Dim x(60) As item  ' <-- Hier wil je de array-variabele "x" definieren
                   ' als een Datatype "item", en als je geen Datatype
                   ' "item" gecreeerd hebt, en dat heb je niet,
                   ' kan dit dus niet!!!

' Instantiates each member of an array by using a loop. 
Dim q As Integer 
For q = 0 To 60 
   x(q) = New item 
Next 

' Assigns a member of an array a reference to an existing object. 
Dim myItem As New item 
x(0) = "Hamburger" 
x(1) = "Cheeseburger" 
x(2) = "Dubbele Cheeseburger" 
x(3) = "Dubbele Cheeseburger met Bacon"
Om dus de fout aan te wijzen: je wilt een variabele definieren als een andere variabele. Dit kan niet aangezien VB altijd een variabele wil gedefinieerd zien als een Datatype (Byte, Integer, String, etc...) Je kunt wel custom datatype's maken, maar dan moet je in de een class creeeren en daarin je custom datatype aanmaken, die je daarna in je module (en forms) kunt aanroepen. Zoek via google maar eens hoe je dat doet, of pak een goed VB boek erbij.

Hopelijk heb je hier iets aan.
Nou, de code is onderhand al iets gewijzigd. Het probleem is momenteel dat ik een verwijderknop heb die lichtelijk labiel is, dwz, als ik iets wil verwijderen zonder eerst het te verwijderen item te selecteren, dan crasht het programma. Ik wil het programma foolproof maken (het word immers op de laatste werkdag van de week ingezet) en dus moet ik hier iets op verzinnen.

Tevens wil ik (bedenk ik me net) ook een totaalprijs laten berekenen, aan de hand van wat je selecteert, en nu staat de prijzen als text achter de naam van het product in het ini bestand waar hij zijn productinformatie uit haalt, dus daar kan ie niks mee.

Als laatste moet ik nog de mayonaise en ketchup keuze in het bestelformulier zien te verwerken. Hier is de code zoals hij er nu uitziet:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
Private Sub Form_Load()
   Dim iFileNum As Integer
   Dim sProgDir As String
   Dim sFileName As String
   Dim sTextLine As String
   Dim oCB As ComboBox
    
   sProgDir = Trim(App.Path)
   If Right(sProgDir, 1) <> "\" Then
      sProgDir = sProgDir & "\"
   End If
   sFileName = "data.ini"
    
   ' Reading sFileName
   iFileNum = FreeFile
   Open sProgDir & sFileName For Input Access Read As iFileNum
   Do While Not EOF(iFileNum) ' Loop until end of file.
      Line Input #iFileNum, sTextLine ' Read line into variable.
      If Left(sTextLine, 1) <> ";" And Left(sTextLine, 1) <> "" Then ' sla regels die beginnen met ; of leeg zijn over
         Select Case sTextLine
         Case "[combo1]"
            Set oCB = Form1.Combo1
         Case "[combo2]"
            Set oCB = Form1.Combo2
         Case "[combo3]"
            Set oCB = Form1.Combo3
         Case "[combo4]"
            Set oCB = Form1.Combo4
         Case "[combo5]"
            Set oCB = Form1.Combo5
         Case "[combo6]"
            Set oCB = Form1.Combo6
         Case "[combo7]"
            Set oCB = Form1.Combo7
         End Select
         If Left(sTextLine, 1) = "[" Then
            ' sla regels die met [ beginnen vanaf hier over
         Else
            With oCB
               oCB.AddItem sTextLine
            End With
         End If
      End If
      DoEvents
   Loop
   Close iFileNum ' Close file.
End Sub




Private Sub Command2_Click()

verw_item = List1.ListIndex


If verw_item = "" Then
MsgBox "Je moet wel iets selecteren om te verwijderen!", 0, "Fout!"
Else

verw_item = List1.ListIndex

controle = List1.ListCount
If controle > 0 Then
List1.RemoveItem (verw_item)
Else
MsgBox "Er is nog niets te verwijderen!", 0, "Fout!"
End If
End If




End Sub

Private Sub Command3_Click()
List1.Clear
End Sub

Private Sub Command4_Click()
End
End Sub

Private Sub Picture1_Click()

lijst = List1.ListCount
If lijst > 0 Then

MsgBox "Je hebt reeds gekozen! Leeg de lijst of druk op bestel.", 0, "Fout!"
Else


sel1 = Combo1.Text
sel2 = Combo2.Text
sel3 = Combo3.Text
sel4 = Combo4.Text
sel5 = Combo5.Text
sel6 = Combo6.Text
sel7 = Combo7.Text

If sel1 = "" Then sel1 = "Anoniem"
If sel2 = "" Then sel2 = "-"
If sel3 = "" Then sel3 = "-"
If sel4 = "" Then sel4 = "-"
If sel5 = "" Then sel5 = "-"
If sel6 = "" Then sel6 = "-"
If sel7 = "" Then sel7 = "-"

List1.AddItem (sel1)
List1.AddItem "----------------------"
List1.AddItem (sel2)
List1.AddItem (sel3)
List1.AddItem (sel4)
List1.AddItem (sel5)
List1.AddItem (sel6)
List1.AddItem (sel7)

End If

End Sub

  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
Afbeeldingslocatie: http://img150.exs.cx/img150/9336/screen6jr.jpg

... voor de volledigheid en handigheid ook even een screen van het form erbij :)

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Vergeten jullie je screenshots niet te resizen? Deze zijn nogal groot namelijk :) Verder is dit meer iets voor PW

SA > PW

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • HTT-Thalan
  • Registratie: Juni 2004
  • Laatst online: 23:33

HTT-Thalan

technically, I'm not pedantic.

Topicstarter
Spider.007 schreef op woensdag 15 december 2004 @ 16:31:
Vergeten jullie je screenshots niet te resizen? Deze zijn nogal groot namelijk :) Verder is dit meer iets voor PW

SA > PW
Ik had net een TR geplaatst, je was me net voor :')
Pagina: 1