Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
Antonín Hurník:11. září 14:13

Jsem ve Visual Studiu 2017 začátečník. Mám několik textboxů a chci přecházet z jednoho do druhého klávesami šipek nahoru a dolu.

Zkusil jsem: Pokud zadám příkaz TextBox2.Select() z jiné procedury z modulu, tak mi tam kurzor skočí. Pokud stejný příkaz použiji z události TextBoxu1 (TextBox_KeyDown), tak nereaguje. Když do stejné události zadám samotný příkaz TextBox2.Select(), tak mi funguje na klávesu ENTER, nebo TAB. Po zadání If Asc(e.KeyCode) = 52 Then
TextBox2.Select()
End If
mi při krokování procedurou projede, ale kurzor na další textové pole nepřeskočí.

 
Odpovědět 11. září 14:13
Avatar
Odpovídá na Antonín Hurník
Jiří Hlaváček:12. září 1:06

V momentě, kdy máš ovládací prvek, který má možnost pohybovat kurzorem (jako TextBox), tak to na šipky nereaguje - ani v KeyDown ani KeyUp ani KeyPress.
Několikrát jsem se k tomu dostal a většinou jsem to po nějaké době testování udělal jinak (bez TextBoxu), protože to nebylo tak nutný.
Napadá mě, že jde zachytit událost přímo ze systému a ne prostřednictvím události ovl. prvku, tak by to třeba šlo obejít ...

 
Nahoru Odpovědět 12. září 1:06
Avatar
jozef_i
Člen
Avatar
Odpovídá na Antonín Hurník
jozef_i:12. září 7:57

Malo by tam byť najprv asi TextBox2.Focus(), ak sa dobre pamätám.

 
Nahoru Odpovědět 12. září 7:57
Avatar
Odpovídá na Jiří Hlaváček
Antonín Hurník:12. září 13:19

Tomu co píšeš bych docela uvěřil, ale zaráží mě to, že když krokuju kódem po řádcích, tak při stisku šipky dolů je podmínka KeyDown splněna a program projede až k příkazu TextBox.Select(), jede dál, ale příkaz neprovede. Když místo TextBox.Select() napíšu jiný příkaz, (třeba textBox2.Text="Bla­bla") tak ho provede. Proto si myslím, že chyba nebude v tom, že by program nezachytil při stisku šipky dolů událost KeyDown, nýbrž v samotném příkazu TextBox.Select(), který ale v jiných procedurách funguje. Mimochodem, co píše jozef_i je pravda, ale chová se to úplně stejně. Prostě příkaz TextBox.Focus() neprovede. Proč ho ale provede, když projíždí stejnou proceduru po stisku klávesy ENTER ???.

 
Nahoru Odpovědět 12. září 13:19
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. září 13:26

Napada mne nekolik veci kolem udalosti. Ale VB nepouzivam.

  1. V JS (html) to funguje tak, ze udalost se da zachytit v elementu nebo v objektu event. Pak to zachytava globalne.

event.keycode = kod klavesy
event.target = element
Ale, kdyz se pouzije odkaz, ten ma na sobe vazane presmerovani, tam je treba zastavit funkci, ktera se spousti s odkazem

<a href="jina_stranka.htm" onclick="funkce(); return false;"></a> - tohle provede funkci a zustane stat
<a href="jina_stranka.htm" onclick="funkce();"></a> - tohle hned presmeruje, driv nez se funkce dokonci
<a href="jina_stranka.htm" onclick="return funkce();"></a> - funkce rozhodne, zda se provede odkaz ci ne

Cili, mozna je treba pridat do funkce neco jako stopPropagation

  1. Pak je tu moznost, ze element vubec ty udalosti nesleduje. Takze by to treba nemuselo udelat nic, ani vypsat text.
  2. Mozna je nutne dostat se na ten element pres dokument, nejaky globalni objekt, ve kterem je umisten. Zachytavani klavesnice je udalost casovace, programu, ktery bezi na pozadi a sleduje klavesnici. Tyhle programy bezi mimo hlavni okno, funkce, nemaji poneti o tom, jestli nejaky objekt je ci neni vyvoren. Praci s neexistujicim objektem bez vyhlaseni chyby ignoruji.

To by mohlo vysvetlit projiti cyklu.

Jinak, jak pise jozef_i, k objektu bych pristupoval pres focus(). Select, selection je oznaceni textu. Ale, neznam terminologii VB, takze to muze fungovat misto focus.
V JS se treba pouziva take focus().

PS. Zkusil jsi reseni nejdriv vygooglovat? :)

Editováno 12. září 13:27
 
Nahoru Odpovědět 12. září 13:26
Avatar
Odpovídá na Antonín Hurník
Andy Scheuchzer:12. září 15:15

A co PreviewKeyDown? A potom bacha na handled :-). Já dělám jenom v C# (ale tam by takový rozdíl neměl být) a nevím, v čem to máš (ve WPF určitě preview je), takže pokud to tam nebude, sorry za spam ;-).

Nahoru Odpovědět 12. září 15:15
Člověk, co si myslí, že snědl všechnu moudrost světa, i když tomu tak není.
Avatar
Antonín Hurník:12. září 17:21

Bingo !!! Tak jsem stejnou situaci nasimuloval v jiné aplikaci a ejhle, ono to chodí. Porovnal jsem si tedy vlastnosti TextBoxu v jedné i druhé aplikaci a zjistil jsem, že celý problém je v tom, že jsem měl u TextBoxu vlastnost Multiline na True. Po změně na False už to normálně funguje. Tím mi, ale nastal další problém jak si nastavit požadovanou výšku TextBoxu, protože se mi automaticky upravuje podle velikosti fontu. ;-)

 
Nahoru Odpovědět 12. září 17:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.