Zkusil jsem do vašeho formuláře sáhnout sám. Pravdu máte i nemáte. Máte ji v tom, že to není moc průhledné, není ale pravda, že by to nešlo. Zvolil jste jen hodně složitou organizaci formuláře a za tu složitost platíte příslušnou daň.
Každý aktivní prvek ve formuláři má vlastnosti TabStop a TabIndex. TabStop určuje, jestli se má na prvku zastavit kurzor, když je na řadě. TabIndex definuje logické pořadí prvků pro jejich postupnou aktivaci při procházení prvků pomocí Tab (případně se aktivovat po opuštění předchozího prvku).
Celou vaši hru komplikuje použití rámečků (Frames), v rámci nichž platí TabIndex jako interní očíslování prvků uvnitř rámečku. Služba View / TabOrder kulturním způsobem obsluhuje vlastnost TabIndex ve vybrané oblasti. Pokud chcete nastavovat pořadí aktivních prvků, nastavte nejdřív pomocí ní pořadí rámečků na formuláři. Následně volte jednotlivé rámečky a nastavte pořadí prvků v nich. Nabídka View / TabOrder pro pořadí uvnitř rámečku k dispozici je také. Jinak je možné pořadí prvků nastavit ručně přečíslováním vlastnosti TabIndex (jde vždy o pořadí uvnitř jeho lokální oblasti (rámečku, pokud v něm prvek leží).
Ruční nastavení vlastností TabIndex a TabStop mne nikdy nezklamalo a jsem přesvědčený, že by nezklamalo ani vás. Když nechcete, aby vám Page skákala jako koza, nenuťte ji k tomu přechodem na prvek, který právě není vidět. Pokud vás logika formuláře nutí dodržet pořadí položek, změňte uspořádání formuláře tak, aby automatický scrolling probíhal jen v jednom směru a nevracel se.
Edit: můžete se prakticky zcela zbavit automatické navigace ve formuláři. Zrušte nastavení TabStop pro všechny prvky formuláře; formulář pak bude reagovat výhradně na výběr prvku pomocí myši.
citovat