Jak zjistit ASCI hodnotu klávesy? – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak zjistit ASCI hodnotu klávesy? – .NET – Fórum – Programujte.comJak zjistit ASCI hodnotu klávesy? – .NET – Fórum – Programujte.com

 

JiriVavru0
Návštěvník
3. 12. 2008   #1
-
0
-

Zdravím
Mám dotaz, jak by se dala zjistit ASCI hodnota určité klávesy, chtěl bych totiž použív v konstrukci switch, např klávesu esc pro ukončení.
Ale netuším, jak její hodnotu definovat.

Díky za jakoukolliv radu

Nahlásit jako SPAM
IP: 89.24.5.–
KIIV
~ Moderátor
+43
God of flame
3. 12. 2008   #2
-
0
-

na to se uz neda rict snad nic jinyho nez UTFG

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JiriVavru0
Návštěvník
3. 12. 2008   #3
-
0
-

Jasně, ale já bych potřeboval vědět, jestli se na to musí použít ještě např. nějaká porovnávací fce, nebo je možně to napsat přímo?
NApříklad:
case "VK_ESCAPE": Console.WriteLine("provadim..."); break;

Nahlásit jako SPAM
IP: 89.24.5.–
Japo0
Návštěvník
3. 12. 2008   #4
-
0
-

Jestli potřebuješ kontrolovat stisk klávesy Escape, tak použij tento kód:



switch (Console.ReadKey().Key)
{
....
case ConsoleKey.Escape: Console.WriteLine("provadim..."); break;
...

}


Nepotřebuješ žádnou ASCII nebo jinou hodnotu. Taky nezapomeň, že Console.ReadKey čeká na stisk klávesy.

Pokud děláš okenní aplikaci, doporučuji nastavit událost přes designer.

Nahlásit jako SPAM
IP: 90.176.243.–
KIIV
~ Moderátor
+43
God of flame
3. 12. 2008   #5
-
0
-

je to proste jen cislo...

ja sem pouzival neco takovyho:

void * Menu::key_event(KEY_EVENT_RECORD * KeyEvent) { 

int * t;
General_class * tmp = this;

if ( KeyEvent->bKeyDown ) {
t = (int *) &KeyEvent->uChar;
void * parent = NULL;

switch ( KeyEvent->wVirtualKeyCode ) {
case VK_UP: dynamic_cast <Menu *> (tmp)->prev(); break;
case VK_DOWN: dynamic_cast <Menu *> (tmp)->next(); break;
case VK_RETURN:
switch ( dynamic_cast <Menu *> (tmp)->action_type() ) {
case 1: parent = tmp ; // je to objekt menu
tmp = (Menu *) (dynamic_cast <Menu *> (tmp)->action_ptr());
tmp->parent(parent);
tmp->set_ini(ini);
tmp->set_mysql(serv);
ClearRect(2, LINES-4);
tmp->show();
break;
}
break;
case VK_ESCAPE:
parent = tmp->getparent();
if ( parent == NULL ) {
return NULL;
}
tmp = (Menu *) parent;
ClearRect(2, LINES-4);
tmp->show();
break;
...

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JiriVavru0
Návštěvník
3. 12. 2008   #6
-
0
-

To Japo :
A co kdybych, chtěl v tom switchi rozdlišit i klasické hodnoty? To by asi nebylo možné viď?

switch (vstup,Console.ReadKey().Key) 

{
// osetrim vstupy a priradim jim funkce
case "Key.Escape":
Console.Clear();
Console.WriteLine("provadim...");
break;
case "2":
KamMuzu();
break;

Editoval djanosik: Tam dole je taky tlačítko "Editovat". Když na něco zapomenu, tak je velice snadné to změnit a nemusím zdržovat moderátora duplicitníma příspěvkama.

Nahlásit jako SPAM
IP: 89.24.5.–
3. 12. 2008   #7
-
0
-

To KIIV : Chápu tvou snahu poradit a cením si toho, ale zkus se prosím omezit na zdrojový kód v jazyku, který autor požaduje (C#, pokud není uvedeno jinak) a nebo alespoň na kód v jiném z .NET jazyků (tím může být i C++, ale jen pokud se omezíš na čistě řízený kód). Ostatní možnosti mohou zbytečně vyvolávat zmatek. Díky za pochopení.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
KIIV
~ Moderátor
+43
God of flame
3. 12. 2008   #8
-
0
-

wtf: "Key.Escape": ????
ty to chces srovnavat s nejakym retezcem? tak to ti na 101%nepujde... .tedy pokud by nahodou ten retezec nebyl ulozenej na adrese 27 ale to neni zase tak velka sance aby to vzniklo...
srovnavat mas se znakem.... znak se dela v C a pod. pomoci ' .... tj jednoduche uvozovky... dvojita uvozovka dela retezec v pameti ukonceny specialnim znakem '\0' aby funkce ktere neco s retezcem delaji vedely kde skoncit pracovat

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Japo0
Návštěvník
3. 12. 2008   #9
-
0
-

To JiriVavru : Pozor, nejsou tam uvozovky, nejedná se totiž o řetězec, ale o výčet.

V předchozím příspěvku jsem měl chybu, není to Key, ale ConsoleKey, tedy: case ConsoleKey.Escape.

Takto lze klávesy porovnávat proto, že ConsoleKey je výčet všech možných kláves a Console.ReadKey().Key je právě typu ConsoleKey.

Mimochodem, správně je "switch (Console.ReadKey().Key)" a ne "switch (vstup,Console.ReadKey().Key)". (Na co je ten "vstup"?)

Nahlásit jako SPAM
IP: 90.176.243.–
KIIV
~ Moderátor
+43
God of flame
3. 12. 2008   #10
-
0
-

To djanosik : netusil sem ze kdyz je to .NET tak jde jedine o C#...
ale je pravda ze ten kod v dotnetu neni :D

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
3. 12. 2008   #11
-
0
-

To KIIV : Ale no tak, to jsem přece nenapsal.

BTW: Pokud by hodnota Console.ReadKey().Key byla typu String, tak by porovnávání s textovým řetězcem samozřejmě fungovalo.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 66 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý