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
Fórum › .NET
Jak zjistit ASCI hodnotu klávesy?
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.
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;
...
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.
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í.
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
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"?)
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.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Makro pro Word: Jak zjistit jestli je vybraný text a jak nastavit sc… — založil oxidián
Jak zjistit soubory — založil XRobotRobocop
Jak zjistit přetečení? — založil
Jak zjistit IP adrsu PC — založil machis
Jak zjistit jmeno PC? — založil machis
Moderátoři diskuze