• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

SetFocus bij barcode scannen

Status
Niet open voor verdere reacties.

amh

Gebruiker
Lid geworden
15 jan 2011
Berichten
18
Hallo Forum
Nadat ik al diverse keren geholpen ben, waarvoor nogmaals mijn dank, heb ik opnieuw een probleempje
in bijgevoegd (gedeeltelijk) prog. worden er barcodes ingevoerd. Maar ik krijg het niet voor mekaar met SetFocus om na invoeren van een artikel de cursor weer bij het begin te laten knipperen zodat er continu door gescand kan worden (net zoals in supermarkt)De eerste keer staat de cursor wel goed, maar bij het tweede nummer moet je eerst de textbox weer activeren In het voorbeeld heb ik wel wat meer uitleg gegeven en wijst het probleem zich vanzelf. Ik kom er niet uit met SetFocus. en als ik op eind prog. de textbox leeg maak krijg ik foutmeldingen.
Wie kan mij helpen? Waarschijnlijk zie ik iets over het hoofd.Bekijk bijlage helpmij setfocus.xlsm
 
Dit is wat tricky omdat je de focus wilt zetten op een veld dat je aan het verlaten bent. De SetFocus werkt dus wel maar wordt direct overuled door de EnterKeyBehaviour. Doe het volgende:

Zet van alle objecten de TabStop op False behalve van TextBoxAantal en TextBoxNummer.
Zet nu in het OnEnter event van TextBoxAantal de code TextBoxNummer.SetFocus

Dat zou de truuk moeten doen.
 
Laatst bewerkt:
SetFocus

Dit is wat tricky omdat je de focus wilt zetten op een veld dat je aan het verlaten bent. De SetFocus werkt dus wel maar wordt direct overuled door de EnterKeyBehaviour. Doe het volgende:

Zet van alle objecten de TabStop op False behalve van TextBoxAantal en TextBoxNummer.
Zet nu in het OnEnter event van TextBoxAantal de code TextBoxNummer.SetFocus

Dat zou de truuk moeten doen.

Oke,
ik heb de tabstops gezet zoals genoemd, waardoor het al stukken beter werkt, hoef nu alleen nog maar een enter te geven en kan verder
maar jou kreet 'OnEnter event van TextBoxAantal" is voor mij nieuw en kan deze niet vinden, wat bedoel je hiermee. Sorry voor mijn onervarenheid
AmH
 
Dat laatste zorgt en nu juist voor dat je die Enter niet hoeft te geven ;)
Als ik weer thuis ben zal ik de code hier wel even plaatsen.
 
Ik heb het al. De volgende Sub kun je in de code van het formulier erbij zetten:

Code:
Private Sub TextBoxAantal_Enter()
     TextBoxNummer.SetFocus
End Sub

NB:
Al die TabStops op False zetten is niet nodig als je de opdracht TextBoxNummer.SetFocus in het Enter event van het eerstvolgende veld in de tab volgorde na TextBoxNummer zet. Maar ik vond het op deze manier wat makkelijker te volgen en uit te leggen.

Je zou zeggen van zet dan alle tabstops op False behalve die van TextBoxNummer, maar dan is er maar 1 veld met een tab stop en wordt voor het hele formulier de EnterKeyBehaviour uitgeschakeld waardoor je eigen code niet meer wordt geactiveerd.

De SetFocus functie van een object "lijkt" niet te werken als je deze gebruikt in het Exit event van datzelfde object maar het wordt dan gedaan TIJDENS het Exit event. Wanneer het Exit event gereed is gaat de focus alsnog naar het eerstvolgende object in de tab volgorde.

Nu zijn er maar 2 objecten met een tab stop waardoor de focus na het Exit event van TextBoxNummer naar het TextBoxAantal gaat. In het Enter event van TextBoxAantal staat nu dat de focus onmiddelijk naar TextBoxNummer moet.

Een heel verhaal voor 1 simpel regeltje code maar zo zou de oorzaak duidelijk moeten zijn en je probleem opgelost.

Sorry voor mijn onervarenheid
Daar is een forum voor, toch? ;)
 
Laatst bewerkt:
He Edmoor;

We zijn er bijna, maar toen ik gister met alleen de tabstop instelling het programma probeerde,
Kon ik een Enter geven, waardoor het oude nummer in TextBoxNummer helemaal geselecteerd werd, en ik dus zo weer het volgende nummer kon invoeren
Hierbij staat de ‘EnterFieldBihavior’ op 0
Met het nieuwe stukje code gaat de cursor welleswaar naar TextBoxNummer, maar gaat achter het oude nummer staan waardoor ik alsnog het oude nummer moet selecteren.

Dacht dit op te lossen door jou code aan te vullen met TextBoxNummer = “”
Dit is onder TextBoxNummer.SetFocus geplaatst.

Het leek goed te gaan met diverse nummers invoeren achter elkaar,
Maar bij het bedienen van de OK knop gaat programma de fout in op regel

TextBoxVoorraadNieuw.Value = TextBoxVoorraad.Value - TextBoxArtikelVerkoop.Value

Vind dit vreemd, want als ik handmatig met Backspace het veld leeg maak, gaat het wel goed.
De plaats van het stukje code maakt volgens mij niet uit, staat nu achter TextBoxNummer_AfterUpdate, maar heb het ook vooraan geprobeerd.

Leg het vraagstukje maar weer bij jou neer.

AmH
 
Ik heb het al. De volgende Sub kun je in de code van het formulier erbij zetten:

Code:
Private Sub TextBoxAantal_Enter()
     TextBoxNummer.SetFocus
End Sub

NB:
Al die TabStops op False zetten is niet nodig als je de opdracht TextBoxNummer.SetFocus in het Enter event van het eerstvolgende veld in de tab volgorde na TextBoxNummer zet. Maar ik vond het op deze manier wat makkelijker te volgen en uit te leggen.

Je zou zeggen van zet dan alle tabstops op False behalve die van TextBoxNummer, maar dan is er maar 1 veld met een tab stop en wordt voor het hele formulier de EnterKeyBehaviour uitgeschakeld waardoor je eigen code niet meer wordt geactiveerd.

De SetFocus functie van een object "lijkt" niet te werken als je deze gebruikt in het Exit event van datzelfde object maar het wordt dan gedaan TIJDENS het Exit event. Wanneer het Exit event gereed is gaat de focus alsnog naar het eerstvolgende object in de tab volgorde.

Nu zijn er maar 2 objecten met een tab stop waardoor de focus na het Exit event van TextBoxNummer naar het TextBoxAantal gaat. In het Enter event van TextBoxAantal staat nu dat de focus onmiddelijk naar TextBoxNummer moet.

Een heel verhaal voor 1 simpel regeltje code maar zo zou de oorzaak duidelijk moeten zijn en je probleem opgelost.


Daar is een forum voor, toch? ;)
 
amh,

Als je een Barcode nummer invoert dat niet bestaat, komt er inderdaad de foutmelding.

Dus moet er een berichtje komen dat de ingevoerde barcode niet bestaat.

Beste EA;

Begrijp de opmerking niet helemaal, als er een nummer ingevoerd word wat er niet is, komt er netjes een melding dat barcode niet bekend is, en heb je de mogelijkheid een nieuwe in te voeren.
hier gaat het ook niet fout, als je vervolgens een bestaand nummer invoerd, gaat het programma goed verder.
maar ik wil graag dat het invoer vak na verwerking weer klaar staat voor de volgende invoer. Via de OK knop gaat dit goed, maar als er direkt na de eerste invoer nog een nummer of meerdere ingevoerd moeten worden, moet ik eerst het invoer veld leeg maken.
Edmoor heeft dit goed opgelost, maar nu moet alleen het oude nummer na verwerking helemaal geselcteerd worden i.p.v. dat de cursor achter het oude nummer gaat staan.

vriendelijke groet AmH
 
amh,

Sorry had het niet goed gedaan, vergeet mijn vorige bericht.
Ik zal het oude bericht verwijderen.
 
Wijzig de laatste sub eens in het volgende:

Code:
Private Sub TextBoxAantal_Enter()
     TextBoxNummer.Text = vbNullString
     TextBoxNummer.SetFocus
End Sub
 
Wijzig de laatste sub eens in het volgende:

Code:
Private Sub TextBoxAantal_Enter()
     TextBoxNummer.Text = vbNullString
     TextBoxNummer.SetFocus
End Sub


Sorry, was even een weekendje weg.
maar met deze oplossing vliegt het prog. ook de fout in.
Ik laat de vraag nog even open staan, en probeer intussen om op een andere manier de aantallen te berekenen om op die manier de fout te omzeilen
Ik denk wel dat we met jou oplossing verder moeten
Als ik de regel er uit gooi die de fout veroorzaakt, werk het systeempje van doorscannen prima, alleen worden de aantallen niet goed berekend.

AmH
 
"vliegt de fout in" heb ik niet zoveel aan. Als je er een foutmelding op krijgt plaats die hier dan even.
De code is namelijk niks mis mee.
 
"vliegt de fout in" heb ik niet zoveel aan. Als je er een foutmelding op krijgt plaats die hier dan even.
De code is namelijk niks mis mee.

Sorry, het is dezelfde fout als ik eerder heb beschreven, FOUT 13 typen komen niet met elkaar overeen. en dat zit in regel
TextBoxVoorraadNieuw.Value = TextBoxVoorraad.Value - TextBoxArtikelVerkoop.Value
het effect is hetzelfde als met mijn extra regel TextBoxNummer = "" (zie mijn opmerking van 12 aug. 8:38 uur)
Vandaar mijn opmerking ik probeer op een andere manier de gegevens te verwerken
waarschijnlijk mist het programma gegevens op het moment dat textboxnummer leeg word. Vreemde blijft dat als ik met Backspace het Tekstboxnummer vak leeg maak, alles wel goed gaat.
Misschien moet ik de ingevoerde barcode (textboxnummer) direct wegschrijven naar een cel in het spreadsheet, en vervolgens alle berekeningen via deze cel doen.

Als er een code is waarmee je het oude nummer helemaal selecteerd i.p.v. dat de cursor er achter gaat staan, ben ik er ook. Dan word het nieuwe nummer gelijk over het oude nummer heen gescand
dat heb ik geprobeerd toen ik alleen de Tabstops ingesteld had, en dan handmatig een Enter gaf, dan zie je dat het oude nummer helemaal geselecteerd word en kun je een nieuw nummer invoeren.
 
Je mag ook 2 dubbele quotes gebruiken ("") in plaats van vbNullString.

Of

Code:
Private Sub TextBoxAantal_Enter()
     With TextBoxNummer 
         .SelStart = 0 
         .SelLength = Len(.Text) 
     End With 
     TextBoxNummer.SetFocus
End Sub
 
Laatst bewerkt:
Je mag ook 2 dubbele quotes gebruiken ("") in plaats van vbNullString.

Of

Code:
Private Sub TextBoxAantal_Enter()
     With TextBoxNummer 
         .SelStart = 0 
         .SelLength = Len(.Text) 
     End With 
     TextBoxNummer.SetFocus
End Sub


Dit is het, hiermee word de celinhoud helemaal geselecteerd, en kan gelijk een volgend nummer ingevoerd worden.
Bedankt voor je oplossing. Hoef ik de rest van het programma niet aan te passen
Vriendelijke groet AmH
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan