Access-VBA check if the cursor in a Textbox is in the first or last line -
the goal: i've got access database continuous form , want add functionality can go next or previous record pressing up- or down-arrow.
the problem: i've got multiline textbox named txtprojekt , want database check if textbox filled multi-lined text , jump next record if cursor in last line of textbox. likewise want jump previous record if cursor in first line of textbox.
i can check current cursor position selstart, can't find out in line cursor is.
do have ideas?
current code:
private sub form_keydown(keycode integer, shift integer) on error goto err_form_keydown if me.activecontrol.name = "txtprojekt" if not (me.txtprojekt.selstart = 0 , me.txtprojekt.sellength = len(me.txtprojekt.text)) goto exit_form_keydown end if end if if keycode = vbkeyup docmd.gotorecord acactivedataobject, record:=acprevious keycode = 0 elseif keycode = vbkeydown docmd.gotorecord acactivedataobject, record:=acnext keycode = 0 end if exit_form_keydown: exit sub err_form_keydown: msgbox err.description resume exit_form_keydown end sub edit: the result (thanks @newd):
(be sure active keypreview in form, otherwise won't anything)
private sub form_keyup(keycode integer, shift integer) on error goto err_form_keyup if shift = false keyaction keycode, true end if exit_form_keyup: exit sub err_form_keyup: msgbox err.description resume exit_form_keyup end sub private sub form_keydown(keycode integer, shift integer) on error goto err_form_keydown dim curpos integer if shift = false keyaction keycode, false end if exit_form_keydown: exit sub err_form_keydown: msgbox err.description resume exit_form_keydown end sub private sub keyaction(keycode integer, keyup boolean) on error goto err_keyaction static curpos long if keyup = false if me.activecontrol.name = "txtprojekt" if not (me.txtprojekt.selstart = 0 , me.txtprojekt.sellength = len(me.txtprojekt.text)) curpos = me.txtprojekt.selstart goto exit_keyaction end if end if else if me.activecontrol.name = "txtprojekt" if curpos >= 0 if me.txtprojekt.selstart <> curpos goto exit_keyaction end if curpos = -1 else goto exit_keyaction end if end if end if if keycode = vbkeyup docmd.gotorecord acactivedataobject, record:=acprevious keycode = 0 elseif keycode = vbkeydown docmd.gotorecord acactivedataobject, record:=acnext keycode = 0 end if exit_keyaction: exit sub err_keyaction: msgbox err.description resume exit_keyaction end sub (i know, goto exit_keyaction bad style, don't copy me)
i don't have time write code out in full incorporate code well. think if able point @ right should able utilize it.
basically way tell if user has hit end or beginning of multi-line textbox.
public intondown integer public intonup integer 'when user presses key down private sub txtprojekt_keydown(keycode integer, shift integer) if keycode = vbkeyup or keycode = vbkeydown 'save cursor position intondown = txtprojekt.selstart end if end sub 'when user lets go of key private sub txtprojekt_keyup(keycode integer, shift integer) if keycode = vbkeyup or keycode = vbkeydown if intondown - txtprojekt.selstart = 0 'if selstart same debug.print "pointer hasn't moved must @ end or beginning" end if end if end sub with above code listen when user has pressed or down key on keydown listen again on keyup (when let go of key). check see if selstart has changed. if hasn't must mean @ beginning or end of field , can perform record switching.
note: adjust accordingly if have memo fields going on max integer size changing long , want have error handling regardless.
Comments
Post a Comment