set focus

Status
Niet open voor verdere reacties.

manueld

Gebruiker
Lid geworden
12 feb 2012
Berichten
216
ik heb een formulier met een textbox. deze word gevuld met een barcodescanner. wat er nu gebeurt is dat soms een ander programma geopend wordt en access dus niet actief is. zodra ze acces weer aktief maken ligt het aan waar ze klikken. klikken ze in het tekstvak dan is niet alle tekst geselecteerd en wordt de gescande tekst er tussen geduwd. klikken ze ergens anders dan is soms de focus niet op het tekstveld. wat ik graag wil is dat ongeacht waar ze klikken zodra access weer actief is de focus automatisch gaat naar het tekstvak en de reeds bestaande tekst moet dan geselecteerd zijn
 
Hoi,

In de code achter het formulier bij "userform_activate" de code voor het betreffende tekstvak als volgt zetten:
Code:
(jouwtekstboxnaam).setfocus
(jouwtekstboxnaam).sellength = len(jouwtekstboxnaam)
 
Het kan zijn dat de instellingen voor het veld nog niet goed staan; dat kun je nog afdwingen met een extra code.
Code:
Private Sub Form_GotFocus()
    Application.SetOption ("Behavior Entering Field"), "0"
End Sub
 
bedankt voor jullie input. kunnen jullie aangeven wat het precies doet wat jullie aangeven. x.setfocus ken ik al maar x.setlength set hij dan de lengte van de waarde op null dus een leeg veld? en @octafish zorgt jou regel er niet voor dat alle velden direct op leeg gezet worden als je ze aanklikt? want dat is ook weer niet de bedoeling alleen het txt veld waar gescand moet worden mag op null gezet worden

als ik hem op null set ziet het systeem dan de actie als on update? want die aktie gebruik ik na de scan om een vba actie uit te voeren?
 
De code van cheeta snap ik zelf ook niet dus die mag hij/zij zelf uitleggen. Ik gebruik SelLength eigenlijk alleen maar om de cursor aan het eind van een string in een tekstveld te zetten. Dus met iets als:
Code:
     Me.Tekstvak.SelStart=Me.Tekstvak.SelLength
Je gebruikt dan SelLength om de cursor achter het laatste teken te zetten. De voorbeeldcode doet in mijn ogen dus niet veel, want Len(Me.Tekstvak) levert dezelfde positie op als Me.Tekstvak.SelLength. Maar proberen kan gaan kwaad :).
Mijn code daarentegen doet niets met de waarde van je tekstveld, maar verandert een programma-instelling. Je kunt in Eigenschappen aangeven of de cursor in een database bij verplaatsen het volledige veld moet selecteren, of de cursor aan het begin van het veld of aan het eind van het veld moet staan. Een gebruiker kan dat zelf instellen. Met mijn code dwing je af dat de cursor bij verplaatsen altijd het volledige veld selecteert. Je hoeft die code dus ook maar één keer uit te voeren op een formulier, daarna staat de instelling goed.
 
@octafish ik heb het geprobeert en het werkt wel als je via tab naar een veld gaat maar als je met de muis op het veld klikt blijft de cursor staan op de plek waar je klikt zonder alles te selecteren. op zich is het geen probleem dat de waarde eerst verwijderd wordt maar vrees dat dan het on update event gestart wordt
 
Ik snap eerlijk gezegd nog niet helemaal wat je wilt, want je verhaal is een beetje onduidelijk vrees ik. Zo zeg je in je vraag:
klikken ze in het tekstvak dan is niet alle tekst geselecteerd en wordt de gescande tekst er tussen geduwd.
Daar ben je mij dus eigenlijk al een beetje kwijt, want wat is de procedure nu? Je scant blijkbaar iets met een barcodescanner, en dat moet in een tekstveld komen te staan. Dat zal niet zo'n probleem zijn; ik heb dat ook een paar keer gebouwd. Als de scanner goed werkt, is dat geen enkel probleem: je zet de cursor in een (toch zeker leeg?) veld, scant en het tekstveld is gevuld.
Wat er daarna gebeurt, lijkt mij eerlijk gezegd niet zo interessant, maar wat ik zeker niet zou willen, is dat je daarna in hetzelfde tekstveld klikt dat dezelfde barcode er nog een keer in wordt gezet. Dus ik zou daar eerder een check op doen: alleen een barcode invullen als het tekstveld leeg is!
 
@octafish ik heb het geprobeert en het werkt wel als je via tab naar een veld gaat maar als je met de muis op het veld klikt blijft de cursor staan op de plek waar je klikt zonder alles te selecteren. op zich is het geen probleem dat de waarde eerst verwijderd wordt maar vrees dat dan het on update event gestart wordt
 
Dat lijkt mij prima! In mijn databases wil ik niet altijd dat de cursor verplaatsing met tab het hele veld selecteert; ik kies dan voor de optie waarbij de cursor achter de bestaande tekst wordt gezet. En als een gebruiker met de muis in een veld klikt, dan is het toch prima dat de cursor daar blijft staan? Waarom zou dat niet mogen? Het is wat anders als je dan alsnog wederom een code invoegt, dat zou je moeten voorkomen. Gebruiker kan altijd dubbelklikken als hij het hele veld wil selecteren. Ik snap het probleem kortom dus nog steeds niet.
 
het gaat hier om een productie omgeving waar men meerdere applicaties gebruikt. in mijn applicatie is maar 1 tekstvak die bruikbaar is voor invoer. ik heb dan ook alleen op dit veld de tab stopt staan. ze gebruiken een barcode scanner om ordernummers in te scannen. na het inscannen wordt er een event gestart die zaken doet. zodra er een nieuw ordernummer gescand moet worden moet het tekstveld actief zijn en de oude tekst geheel geselecteerd zijn zodat deze overschreven word. als deze niet geheel geselecteerd is dan wordt het nieuwe nummer toegevoegd aan de bestaande tekst en klopt de invoer niet. aangezien ze vaak elke seconde moeten scannen moetten ze niet steeds opnieuw selecteren. als ze switchen naar een andere applicatie en ze weer terug switchen klikken ze vaak willekeurig op mijn applicatie om hem te activeren. als ze op het txt veld klikken staat de cursor er tussen en is het veld niet meer geactiveerd. het gaat er dus om dat de applicatie monkey proof is en hoe ze ook de applicatie actief maken hij moet ten alle tijde het txt vak volledig geselecteerd hebben om goed het nieuwe nummer te kunnen scannen

werkt een after update event alleen als de gebruiker hem update of ook als hij via vba wordt geupdate? dan kan ik hem nl via diverse events op null zetten
 
na het inscannen wordt er een event gestart die zaken doet. ... het gaat er dus om dat de applicatie monkey proof is
Even recappen: je hebt dus een formulier (zal geen aparte applicatie zijn, neem ik aan) met daarop één tekstvak? Of meerdere tekstvakken, maar waar ze niks mee mogen doen? En ná het inscannen (en vullen) van dat ene tekstvak gebeurt er van alles en nog wat? Tot zover kan ik het dan nog wel volgen, maar wat ik dan niet snap is waarom je na het uitvoeren van die taken het tekstvak dan niet gelijk leeg maakt. Dan kun je die monkey ook gewoon zijn werk laten doen :).
 
dat vak toont de order waar ze mee bezig zijn. ik kan natuurlijk een vak active order maken die de waarde toont. dus ja dat is geen probleem. het probleem is echter dat het formulier vele objecten kent die op zich geen tab stop hebben maar als je er op klikt de cursor er wel gaat staan. ook hebben ze enkele knoppen die wel een actie hebben maar geen tabstop. eigenlijk moet het dus zo zijn dat als ze een knop activeren die een ander form opent dan moet die geopend zijn maar zodra die gesloten zijn moet de focus weer naar het invoer txtvak. ook als ze ergensanders klikken moet hij weer naar het txtvak. gaan ze naar een andere applicatie en komen ze terug moeten ze naar het txtvak.
 
het probleem is echter dat het formulier vele objecten kent die op zich geen tab stop hebben maar als je er op klikt de cursor er wel gaat staan.
Dan staan de eigenschappen van die tekstvakken niet goed; als een gebruiker niks mag wijzigen in een tekstvak, en je dus geen tabstop daar hebt, dan hoeft hij/zij er ook niet in te kunnen klikken. Dus uitschakelen :).
Je oorspronkelijke formulier krijgt gewoon de focus weer als je het tweede formulier opent met de parameter acDialog.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan