Hi, (this is version 2017 R3)
I have data from 4 or 5 different database tables that I need to display as a single unit in the user interface (and allow for datawindow updating).
It's a bit painful and messy, but I would like it to feel seemless as they tab through the fields. This means the tabbing has to change the focus from one column to another (handled fine by tab order within the datawindow), but it also has to skip out of that regular tabbing and change focus to a different datawindow control... it would have to do this a few times to work.
Here (see attached Personal_Info.PNG) is an example where the dob, gender, married and referred by are in one datawindow A (and table), and overlaid on top is another datawindow B (and table) with next of kin and family dr.
So pressing tab from the married field should move the focus into the next of kin (overriding it's default of moving to the referred by field). And tabbing from the family dr field should move focus to the referred by field.
In the keydown event of A:
STRING sl_current_column
LONG ll_return
ll_return = 0
IF key = KeyTab! AND keyflags = 1 THEN
bi_tab = FALSE
bi_shift_tab = TRUE
ELSEIF key = KeyTab! THEN
bi_tab = TRUE
bi_shift_tab = FALSE
ELSE
bi_tab = FALSE
bi_shift_tab = FALSE
END IF
sl_current_column = This.GetColumnName()
CHOOSE CASE sl_current_column
CASE 'married'
IF bi_tab THEN
tab_main.tp_base.dw_next_of_kin.SetFocus()
ll_return = 1
END IF
CASE 'referral_by'
IF bi_shift_tab THEN
tab_main.tp_base.dw_base.SetFocus()
ll_return = 1
END IF
END CHOOSE
bi_tab = FALSE
bi_shift_tab = FALSE
RETURN ll_return
This kind of works... I can see the focus change to the field I want, but then it changes to a different datawindow altogether. Almost like what would happen if you tabbed through a datawindow's fields, the focus would move to the next control on the window.
It's like the tab event was captured by something else that was listening and moved it along even though I've tried to stop it by returning 1 in the keydown event. I've tried adding keydown/keyup/key event listeners to the other objects on the window (and the window itself) but none of them fire after the keydown event returns 1.
I'd like to see if anyone else has had success with this kind of thing before I throw it out.
Another option I'm considering is putting all fields from all tables in one datawindow and changing the updateable fields at runtime during the save, to manually save across all tables.
If you can/want, try to upload a small sample app in which the problem is reproduced. Don't worry about database, I'll just add some "fixed" data to the dw's.
Code being 20+ years old may even have calls to SetActionCode(int code). There act like "when you hit return; please behave like [return code]". Stemming from pre PB5 when you couldn't [return code] from events like ItemChanged/ItemError, Compiling these days result in WARNING but it is still valid syntax.
However, glad to see you have a solution,
/Michael
True ... but maybe I've missed it. There's no itemChanged involved here, nor ItemError.
Good advice anyway, though it all depends what you do with 'post' in the itemChanged. Sometimes it's the solution for NOT having a problem in itemchanged.
Cheers