Avatar
Jakub Dvorský:

Zdravím mohl by mi někdo poradit jak vypnout program který běží pomocí nějaké klávesy, Potřeboval bych aby program šel vypnout kdykoli v průběhu například klávesou 'A'. Děkuji.

 
Odpovědět 3. února 9:21
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Jakub Dvorský
Lukas C#:

U okenní aplikace použiješ event KeyDown --> tam zavoláš Application.Exit(); Ale konzole nemá žádné takové eventy, takže budeš muset udělat while nebo do-while loop. Do něj umístíš svůj program, a pokaždé, když budeš chtít něco zadávat, tak si to (ten znak, co zadáš) uložíš třeba takto: char exitChar = Console.ReadKe­y(true).KeyChar. Hned poté if(exitChar == 'A') return;

 
Nahoru Odpovědět  +1 3. února 9:38
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Jakub Dvorský
vajkuba1234:

Stačí toto?

http://stackoverflow.com/questions/5891538/listen-for-key-press-in-net-console-app
Nahoru Odpovědět  +1 3. února 9:39
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Jakub Dvorský:

Mám to přes konzoly, ale potřebuji aby se tu ukončilo jakmile zmáčknu to tlačítko. Když tam zadám Console.ReadLine(); tak se to po stisknutí toho tlačítka co to má vypnout se to nevypne a nevím jak to udělat aby se to vyplo.

Editováno 14. února 18:48
 
Nahoru Odpovědět 14. února 18:48
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Jakub Dvorský
Lukas C#:

Aha jo, použij "return". return znamená ukončení metody, takže když se ukončí metoda "main", ukončí se program.

 
Nahoru Odpovědět 14. února 18:57
Avatar
vajkuba1234
Člen
Avatar
Nahoru Odpovědět 14. února 19:07
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Jakub Dvorský:

Omlouvám se že jsem t špatně vysvětlil, dejme tomu že mám tenhle kód a potřebuji ho vypnout za běhu uplně ve kteroukoliv chvíli chci pomocí předem určeného tlačítka například 'a'

Console.WriteLine("Zadej číslo.");
            int a = int.Parse(Console.ReadLine());
            Console.WriteLine("Zadej mocninu.");
            int b = int.Parse(Console.ReadLine());
            for(int i = 0;i  < b; i++)
            {
                a *= b;

            }
            Console.WriteLine("vásledek je {0}.", a);


            Console.ReadKey();
 
Nahoru Odpovědět 14. února 20:14
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Jakub Dvorský
vajkuba1234:

Co toto?

Console.WriteLine("Pro STOP zmackni ESC");
do {
    while (!Console.KeyAvailable) {
        // Udelej neco
   }
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
Nahoru Odpovědět 14. února 20:30
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Jakub Dvorský:

To už jsem zkoušel ale když mám zadat int b a zmáčknu Escape tak se to nevypne a to potřebuju právě vyřešit

 
Nahoru Odpovědět 14. února 20:37
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Jakub Dvorský
vajkuba1234:

Vedle těch dvou palců je tlačítko odpovědět...

Nahoru Odpovědět 14. února 21:03
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na Jakub Dvorský
Michael Škrášek:

Rozhodně to není nejelegantnější řešení, ale funguje, popřípadě si možná budeš muset přidat nějaký speciální znaky ... prostě místo Console.ReadLine() použiješ tuhle funkci ReadLine()

static ConsoleKey exit_key = ConsoleKey.Escape; //klavesa pro ukonceni programu
        static char[] special_keys = { ' ', '"', '(', ')', '[', ']', '{', '}', '_', '-', '+', '*', '/', '\\', '|', ',', '.', '#', '$', '@', (char)39 };

        static void Main(string[] args)
        {
            while (true)
            {
                Console.Write("pro ukonceni aplikace stiknete ESC: ");
                string line = ReadLine();
                Console.WriteLine(line);
            }
        }

        static string ReadLine()
        {
            string ret = "\n";
            do
            {
                ConsoleKeyInfo k = Console.ReadKey();
                if (k.Key == exit_key)
                {
                    Environment.Exit(0);
                }
                else if (k.Key == ConsoleKey.Enter)
                {
                    break;
                }
                else if ((k.KeyChar >= 48 && k.KeyChar <= 57) || // 0 - 9
                        (k.KeyChar >= 65 && k.KeyChar <= 90) || // A - Z
                        (k.KeyChar >= 97 && k.KeyChar <= 122) || // a - z
                        (special_keys.Contains(k.KeyChar))) // specialni znaky
                {
                    ret += k.KeyChar;
                }
            } while (true);
            return ret;
        }
Editováno 14. února 23:05
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 14. února 23:04
Proč to dělat složitě, když to jde jednoduše.
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 12 zpráv z 12.