Avatar billede Slettet bruger
10. september 2007 - 21:31 Der er 11 kommentarer og
1 løsning

Consolapplikation - Registrere om brugeren trykker på en tast

Hej eksperter!

Hvordan kan jeg registrere, om brugeren trykker på en tast (som event) - men uden at programmet går i stå og venter?
Avatar billede nielle Nybegynder
10. september 2007 - 21:39 #1
Du kan f.eks. tjekke på:

Console.KeyAvailable
Avatar billede Slettet bruger
14. september 2007 - 20:41 #2
Hvordan skal det bruges?
Avatar billede nielle Nybegynder
14. september 2007 - 21:49 #3
Tja, det afhænger af sammenhængen du vil bruge den i?
Avatar billede Slettet bruger
15. september 2007 - 10:03 #4
Hvis jeg... Hm, lad os sige 10 gange i sekundet vil registrere om brugeren trykker på en bestemt tast mens resten af koden fortsætter i baggrunden?
Avatar billede Slettet bruger
15. september 2007 - 10:06 #5
Altså noget i stil med:

priate static void Loop()
{
    if (TastenErNede()) // Hvad skulle TastenErNede så være?
    {
        Console.WriteLine("Tasten er nede...");
    }
    // Udfør resten af koden her
    Console.Threading.Thread.Sleep(100);
    Loop();
}
void Main()
{
    Console.WriteLine("Prøv at trykke på en tast.");
    Loop();
}
Avatar billede nielle Nybegynder
15. september 2007 - 10:14 #6
Sådan:

priate static void Loop()
{
    if (Console.KeyAvailable)
    {
        Console.WriteLine("Tasten er nede...");
    }
    // Udfør resten af koden her
    Console.Threading.Thread.Sleep(100);
    Loop();
}
void Main()
{
    Console.WriteLine("Prøv at trykke på en tast.");
    Loop();
}

Men jeg tror nu at je i stedet for ville sætte en Timer igang med at tjekket 1/10 sekind i stedet for at bruge en Sleep.
Avatar billede Slettet bruger
15. september 2007 - 17:28 #7
Øh... Og hvordan finder jeg så ud af, hvilken tast der er trykket på?
Og ja, du har nok ret i at en timer er det bedste til de fleste formål, jeg skrev bare lige noget hurtigt :)
Avatar billede nielle Nybegynder
15. september 2007 - 17:51 #8
Du kan aflæse den på almindelig facon:

string key = Console.ReadLine();
Avatar billede Slettet bruger
15. september 2007 - 20:30 #9
Jamen... Hvad så hvis brugeren trykker på en piletast eller lignende ^o)
Avatar billede nielle Nybegynder
16. september 2007 - 09:14 #10
Prøv at tage et kig på denne stump kode:

        static void Main(string[] args)
        {
            for (int i = 1; i <= 1000000; i++)
            {
                if (Console.KeyAvailable)
                    ProcessKey();
            }
        }

        static void ProcessKey()
        {
            ConsoleKeyInfo cki = Console.ReadKey(true);

            if ((cki.Modifiers & ConsoleModifiers.Alt) != 0)
                Console.Write("ALT+");
            if ((cki.Modifiers & ConsoleModifiers.Shift) != 0)
                Console.Write("SHIFT+");
            if ((cki.Modifiers & ConsoleModifiers.Control) != 0)
                Console.Write("CTRL+");

            Console.WriteLine("[{0}] [{1}]", cki.Key.ToString(), cki.KeyChar.ToString());
        }

Hvis du holer markøren hen over ReadKey og trykker F1 vil du desuden blive præsenteret for noget onlinehjælp som kan give flere oplysninger. :^)
Avatar billede Slettet bruger
16. september 2007 - 16:29 #11
Ahh, ja, du undgår at app'en bare venter på input ved at bruge KeyAvailable først :)
Så forstår jeg bedre, hvad du mente før.
tak for hjælpen og bare smid et svar :P
Avatar billede nielle Nybegynder
16. september 2007 - 16:32 #12
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester