Kurzor - přístup v celé aplikaci   zodpovězená otázka

VB.NET, WinForms

dobrý den,

rád bych se poradil jak se řeší ovládání kurzoru v rámci celé aplikace.

Mám v aplikaci několik formulářů a chtěl bych při zpracovávání měnit zobrazení kurzoru (při čekání). Používám řadu vlastních eventhandlerů.

Jde mi o to, jestli to nelze řešit nějak globálně. Třeba je na to nějaký jednoduchý postup který mě nenapadl.

děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud to dobře chápu, musíš mít handlery na těch místech kde to chceš zachycovat a logikou pak volat metodu Focus() kontroly která je ke dané klávese...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vysvětlím podorbněji o co mi jde:

Mám v aplikaci několik formů

Komunikují spolu přes interface

Příklad:

v jednom formu provedu nějaký úkon, který vyvolá událost v ostatních formech (pomocí interface) a potřebuji než se tato událost vykoná (v cílových formech), aby kurzor ukazoval (ve zdrojovém formu), že tato událost není ještě dokončena pomocí přesýpacích hodin.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve volajícím formuláři nastavte UseWaitCursor = True, po dokončení operace UseWaitCursor = False. Tato vlastnost nastaví formuláři a všem jeho podřízeným prvkům systémově definovaný kurzor pro zaneprázdnění.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nastavení UseWaitCursor = True se nakonec moc neosvědčilo. Konkrétně v případě použití u TreeView byl problém po návratu zpět na hodnotu False. Pokud nedošlo k pohnutí kurzorem, zůstával stále WaitCursor.

Nakonec jsem to vyřešil pomocí EventHandleru. Do Interface (komunikační rozhraní mezi formy) jsem umístil nové události Start a Stop (zahájení a konec libovolné činosti). Jednotlivé formy jsem na tuto událost napojil (zachytávám událost Start a Stop) a podle události v každém formu se změní stav kurzoru. Tím je pro každý Form stejný status kurzoru.

Nakonec jsem před spouštěč Eventu, který vyvolává původní událost (kvůli které potřebuji měnit stav kurzoru) umístil Start a hned za něj Stop.

Potom se tedy provede v metodě pro vyvolání dané události:

- vyvolání události Start pro WaitCursor

- vyvolání libovolné události v rámci aplikace (vlastní EventHandler)

- vyvolání události Stop pro Default cursor

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak naprosto triviální řešení mého požadavku je:

Cursor.Current = Cursors.WaitCursor;
Cursor.Current = Cursors.Default;

důležité je tam to Current. Potom to v rámci celé aplikace funguje na všech formulářích stejně. Tedy při přechodu kurzorem na jiný formulář, ve kterém neběží danný proces, také ukazuje např. WaitCursor.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback