Springen naar inhoud


- - - - -
VB6

Dubbele Items Vermijden In Listbox



  • Log in a.u.b. om te beantwoorden
Er zijn 9 reacties in dit onderwerp

#1 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 02 mei 2022 - 12:04

Hallo,

Ik wil via een textbox items naar een listbox overbrengen maar het mogen geen dubbele items bevatten.
Vb : ik geef in textbox "test"in en bij een tweede poging zou hij geen naam met "test" mogen toevoegen maar het programma moet wel verder gaan. Ik hoef geen messagebox te zien , gezien dit in de achtergrond loopt.

Voer het toevoegen van de tekst gebruik ik volgende code

List1.AddItem (Text1.Text) wat op zich werkt , maar laat wel dubbele items toe

Heb wat afgezocht maar geraak er niet uit.

#2 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 02 mei 2022 - 13:42

Dit is in tussentijd gelukt met volgende code:

For x = 0 To Form1.List1.ListCount - 1
    If UCase(Trim(Form1.List1.List(x))) = UCase(Trim(Form2.Label2.Caption)) Then
                 MsgBox "Item Already Exists"
                 Exit Sub
   End If

Next
Form1.List1.AddItem Form2.Label2.Caption
Text1 = ""

Het volgende probl is dat ik na de messagebox op OK kan drukken maar het programma loopt niet verder en ik weet niet hoe ik dit moet oplossen ?

De code die achter deze handeling nog moet gebeuren is;


If Text2.Text = "" Or Text2.Text = "0" Then
MsgBox ("Opgelet, geen saldo van laatste bestelling !") & vbNewLine & ("Keer terug via ANNULEREN en scan de kaart opnieuw") & vbNewLine & ("Als je wilt afrekenen, druk op de juiste inkomknop en reken af.") & vbNewLine & ("Bij problemen vraag achter Erna of Mario aub"), vbInformation, "DANCETIME"
Form1.Text3 = ""
Form1.Text3.SetFocus
Form1.Command29.Visible = False

Else


Dim filenum As String
filenum = FreeFile
Open "C:\DanceTime\Regfiles\Kaarten\" & (Form1.Text3.Text) & ".txt" For Output As #filenum 'inlezen kaartnummer
Text4.Text = (Val(Text2.Text)) + CDbl(Val(Text1.Text))
Print #filenum, (Text4.Text)
Close #filenum

'hier wordt per datum en per kaart bijgehouden welke dranken en prijs (voor eventuele probl in systeem met optellen)
Open "C:\DanceTime\Regfiles\Overzicht_drank\ " & (Form1.Text3.Text) & " - " & Format(Date, "dd-mm-yyyy") & ".txt" For Append As #filenum 'enkel datum
Print #filenum, (Form1.Text1.Text) + (Form1.Text2.Text)
Print #filenum, "Totaal: " & (Form1.Text2.Text)
Close #filenum

'hier wordt per datum en per kaart totaal saldo dranken bijgehouden (voor eventuele probl in systeem met optellen)
Open "C:\DanceTime\Regfiles\Saldo_Overzicht_drank\ " & (Form1.Text3.Text) & " - " & Format(Date, "dd-mm-yyyy") & ".txt" For Append As #filenum 'enkel datum
Print #filenum, (Form1.Text4.Text)
Close #filenum

'hier zal bijgehouden worden wie dranken besteld heeft per dag om nadien te vergelijken met betaalde saldo's (controle openstaande saldo's)
Open "C:\DanceTime\Regfiles\Overzicht\Personendrankafname\ " & (Form1.Text3.Text) & " - " & Format(Date, "dd-mm-yyyy") & ".txt" For Output As #filenum 'enkel datum
Print #filenum, (Form1.Text3.Text)
Close #filenum

filenum = FreeFile
Open "C:\DanceTime\Regfiles\Overzicht\Details\Volledige\" & (Form1.Text3.Text) & ".txt" For Output As #filenum 'volledige bestelling
Write #filenum, ("--------------------------" & vbCrLf & (Form1.Text1.Text) + (Text7.Text))
Close #filenum

Open "C:\DanceTime\Regfiles\Overzicht\Details\Laatste\" & (Form1.Text3.Text) & ".txt" For Output As #filenum 'laatste bestelling
Write #filenum, (Form1.Text1.Text)
Close #filenum

'voor Ticketafdruk ter controle
Open "C:\DanceTime\Regfiles\Overzicht\Personendrankafname\drankafname " & ".txt" For Append As #filenum
Print #filenum, (Form1.Text3.Text)
Close #filenum

Form1.Text1.Text = "" 'omschrijving
Form1.Label7.Caption = "0"
Form1.Text2.Text = "" 'prijs
Form1.Text3.Text = "" 'kaartnummer
Form1.Text4.Text = "" 'saldo leeg maken
Form1.Text3.SetFocus
Form1.Command29.Visible = False
Form1.Command43.Visible = False 'toon keyboard

'het aanmaken van ticket
filenum = FreeFile
Open "C:\DanceTime\Regfiles\Tickets\Ticket " & ".txt" For Output As #filenum  'enkel datum
Print #filenum,
Print #filenum, Tab(2); (Label2.Caption) 'namen kaarthouders
Print #filenum,
Print #filenum, Tab(2); "---------------"
Print #filenum, Tab(2); "Bestelling:"
Print #filenum, Tab(2); "---------------"
Print #filenum, Tab(1); (Form2.Text5.Text) '(Form2.Label15.Caption) -> nadien verwijderen
Print #filenum,
Print #filenum, Tab(2); "---------------"
Print #filenum, Tab(2); "Aantal: " & Label18.Caption
Print #filenum, Tab(2); "---------------"
Print #filenum,
Print #filenum, Tab(2); "==============="
Print #filenum, Tab(2); "Bedrag: " & (Form2.Label16.Caption) & " €" 'Totaal: ...
Print #filenum, Tab(2); "==============="
Print #filenum,
Print #filenum, Tab(2); "Time :" & (Time$)
Print #filenum, Tab(2); "Date :" & Format(Date, "D Mmmm Yyyy")
Print #filenum,
Close #filenum

Form1.Label8.Caption = "Selecteer drank(en) of scan voor af te rekenen." 'melding op scherm wat te doen

Dim yesno As VbMsgBoxResult
yesno = MsgBox("Ticket afdrukken?", vbQuestion + vbYesNo, "Print")
If yesno = vbYes Then

'printen van logo
Dim stdPicture As stdPicture
Set stdPicture = LoadPicture("C:\DanceTime\Regfiles\DTlogoticket.jpg")
Printer.PaintPicture stdPicture, 0, 0
Set stdPicture = Nothing
'Printer.EndDoc 'terug aan indien na logo niet meer moet printen, in geval van nu moet logo en text printen en dan end doc

'Het aanmaken van een barcode voor ticket
Printer.Font.Name = "Bar-Code 39"
Printer.Font.Size = 35
Printer.Print 'lege regel
Printer.Print 'lege regel
Printer.Print Tab(2); "*" + Label10.Caption + "*" 'de* zijn nodig voor de start en eind te bepalen van de code anders scant deze niet
Printer.Font.Name = "Courier"
Printer.Font.Size = 14

'printen van inhoud (bestelde dranken)
Dim Tekst As String
Open "C:\DanceTime\Regfiles\Tickets\Ticket " & ".txt" For Input As #1
Do While Not EOF(1)
Line Input #1, Tekst
Printer.FontSize = 12
Printer.Print Tekst
Loop
Printer.EndDoc
Close #1
End If
End If
Unload Me

#3 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht gisteren, 15:27
  • LocatieMechelen (BE)

Geplaatst op 15 mei 2022 - 20:37

kun je dat tussen vb-tags zetten, dan word het mooi geformatteerd.

In de plaats van Exit sub is het exit for, de exit sub springt (zoals je ziet direct naar het einde van de sub zonder nog 1 regel code uit te voeren terwijl je alleen een exit for wilt doen.

#4 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 19 mei 2022 - 11:29

Bedankt voor je uitleg.
Hij gaat inderdaad wel verder met Exit For maar voegt toch dubbele items in de listbox

De bedoeling is dat het systeem geen dubbele items in listbox mag toevoegen maar wel verder moet gaan voor de rest van de code te laten uitvoeren
Met Exit For gaat het idd wel verder maar voegt wel meermaals dezelfde item in de listbox

Dim filenum As String
filenum = FreeFile
For x = 0 To Form1.List1.ListCount - 1
    If UCase(Trim(Form1.List1.List(x))) = UCase(Trim(Label2.Caption)) Then
                 ''MsgBox "Item Already Exists"

                 Exit For
                 End If

Next
Form1.List1.AddItem Form2.Label2.Caption

Mis ik iets hier, want kom er niet meer uit

#5 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht gisteren, 15:27
  • LocatieMechelen (BE)

Geplaatst op 19 mei 2022 - 19:16

Gebruik de VB- BB-tag om je code, dat maakt het lezen van code gemakkelijker


Steek die for loop in een sub en roep die sub aan
Visual Basic Code:
Private sub CheckInList()
For x = 0 To Form1.List1.ListCount - 1
If UCase(Trim(Form1.List1.List(x))) = UCase(Trim(Form2.Label2.Caption)) Then
MsgBox "Item Already Exists"
Exit Sub
End If
Next
Form1.List1.AddItem Form2.Label2.Caption
end sub


dan kun je in de hoofd sub the for verwijderen en direct de CheckInList() sub aanroepen

er zijn nog mogelijkheden

Check doen waar de x is gebleven
Visual Basic Code:
Dim filenum As String
filenum = FreeFile
dim x as interger =0
For x = 0 To Form1.List1.ListCount - 1
	If UCase(Trim(Form1.List1.List(x))) = UCase(Trim(Label2.Caption)) Then
				 MsgBox "Item Already Exists"
				 Exit For
				 End If

Next
if x>=Form1.List1.ListCount then Form1.List1.AddItem Form2.Label2.Caption



#6 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 20 mei 2022 - 11:21

Sorry weet niet hoe de vb tags te gebruiken.

Dim x as integer=0 geeft een foutmelding (integer is wel verkeerd geschreven in uw voorbeeld) maar ook met
de juiste spelling krijg ik volgende error

Visual Basic Code:
Dim filenum As String
filenum = FreeFile
Dim x As Integer =0 'hier gaat het fout
For x = 0 To Form1.List1.ListCount - 1
If UCase(Trim(Form1.List1.List(x))) = UCase(Trim(Label2.Caption)) Then
MsgBox "Item Already Exists"
Exit For
End If

Next
If x >= Form1.List1.ListCount Then Form1.List1.AddItem Form2.Label2.Caption
Open "C:\DanceTime\Regfiles\List1\List1.txt" For Append As #1
Print #filenum, (Form2.Label2.Caption) & vbCrLf
Close #1


#7 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 20 mei 2022 - 13:07

Als ik Dim x AsInteger doe gaat het ook , alleen zit ik met het volgend probleem bij het wegschrijven
naar de file zitten er toch dubbele items in
In de listbox zitten geen dubbele items maar wel in de weggeschreven file ?

Visual Basic Code:
Open "C:\DanceTime\Regfiles\List1\List1.txt" For Append As #1
Print #filenum, (Form1.List1.Text) & vbCrLf
Close #1 

Dus als ik mijn tekstbestand open zie ik volgende erin:

#8 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 20 mei 2022 - 13:11

Inhoud Tekstbestand list1



Bob en Marthe

Frank en Lina

Mark en Tanja

Mark en Tanja

Mark en Tanja

#9 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 893 berichten
    Laatst bezocht gisteren, 15:27
  • LocatieMechelen (BE)

Geplaatst op 20 mei 2022 - 17:04

Ja wat snel getypt. Je zult iets met de if moeten doen of je sub opsplitsen in sub-subs :D programmeren is proberen tot het het doet wat je wilt en dan hopelijk heb je geen fouten :)

Trouwens als mijn geheugen nog goed is is een freefile een integer en geen string dus dat je code runt zonder probleem is nogal raar https://docs.microso...eefile-function

#10 Y@no

Y@no

    Starting Developer

  • Leden
  • 14 berichten
    Laatst bezocht 24 mrt 2024 17:02

Geplaatst op 30 mei 2022 - 12:48

Dag Damic,
Bedankt voor het meedenken en uw oplossing.
Ik ben hiermee geholpen, de laatste fout zat in de APPEND , deze aangepast naar OUTPUT.
Nu werkt het zoals ik het wou.

Gr en nogmaals bedankt.





Ook met taq VB6 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VB6] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)