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

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -