Pouziti klavesnice

Anonymous at 2008-07-30 12:36:59

Ahoj :)

Pisu zapoctak k programku, ale mam mensi problem.
Je to Windows aplikace a potrebuju po stisku klaves vyvolat nejakou udalost (jsou to sipky, ktere mi meni smer).
Ale nevim jak to udelat :( dal jsem tam ctyri buttony jenze k nem nemuzu pridat klavesovou zkratku :(
pls poradte jak to mam udelat.

Diky :)

EDIT: Jo a pisu to v Microsoft Visual C# Express Edition :)

Him at 2008-07-30 12:56:32

Normalne ProcessCmdKey nezachytava sipky, musis tu metodu overridnout

   

// override ProcessCmdKey pro zachytavani stisku klaves: left/right/up/down arrow atd..
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
        if (keyData == Keys.Left) // Keys.Right,...
        {
            // proved neco 
            return true;
        }

        return base.ProcessCmdKey(ref msg, keyData);
}
Anonymous at 2008-07-30 13:25:13

Diky, ale to nedela to co potrebuju :(

napr. v tomhle

public partial class Form1 : Form
    {
        // override ProcessCmdKey pro zachytavani stisku klaves: left/right/up/down arrow atd..
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Left)
            {
                MessageBox.Show("Vlevo");
                return true;
            }
            if (keyData == Keys.Right)
            {
                MessageBox.Show("Vpravo");
                return true;
            }
            if (keyData == Keys.Down)
            {
                MessageBox.Show("Dolu");
                return true;
            }
            if (keyData == Keys.Up)
            {
                MessageBox.Show("Nahoru");
                return true;
            }

            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void button1_Click(object sender, EventArgs e)
        {

            System.Random rnd = new System.Random();
            for (int i = 0; i < 1000; i++)
            {
                button1.Top = rnd.Next(100);
                button1.Left = rnd.Next(200);
                for (int j = 0; j < 100000; j++)
                {
                }
            }
        }
    }

po stisku tlacitka mi nereaguje klavesnice, pouze po skonceni for cyklu mi to vyhodi message box prvni sipky kterou jsem zmackl .

Ja bych ale potreboval aby mi hned po stisku klavesy vyhodilo ten messagebox :)
pls nejakou radu
diky :)

Him at 2008-07-30 13:29:13

Ja to resil pres vlakna.. hledej na webu: c# Threads

Wideman at 2008-07-30 16:09:44

Někde dole v této diskusi: http://forum.builder.cz/read.php?31,2672162 je odkaz na dobrej popis vláken v C#. Je to myslim kapitola z knihy C# in nutshell a já jsem se to z toho učil. Mimochodem při práci na zápočťáku jsem objevil tento web: https://downloads.channel8.msdn.com/ Tam si můžete zdarma stáhnout VS 2008 Professional a další programy, ale musíte se zaregistrovat a mít platnou ISIC kartu UK, jejíž kód to při registraci taky vyžaduje.