[ djzmaj @ 27.02.2009. 02:15 ] @
Verovatno je prosto ali sam pocetnik i jos ne znam kako to da uradim.

Imam recimo button1 i hocu da DOK DRZIM neki taster na tastaruti (recimo W) program drzi pritisnut button1 i uradi jednu komandu (npr. posalje keca na jedan od data portova serijskog porta), a kada pustim taj isti taster da program uradi nesto drugo (npr. posalje nulu na isti port).
Treba mi pomoc samo oko programiranja button-a da radi na komande sa tastature, sve ostalo sto mi je trebalo sam resio.

Hvala unapred. Pozdrav.
[ Sapphire @ 01.03.2009. 02:03 ] @
Ja te bas i nisam razumio, moras samo malo jos bolje pojasniti sta tacno zelis.
Iz pitanja se zakljucuje da ti treba kombinacija tipki (spominjao si drzanje tastera), a onda kazes da treba poslati samo jedan signal, te poslati drugi u trenutku pustanja tastera?
Ne razumijem niti zasto ti bas treba takvo ponasanje programa, te da li izmedju ta dva dogadjaja trebaju da se signali salju u nizu jedan za drugim.

Uglavnom, rjesenja imas jako mnogo, zavisno od onoga sta ti treba.
Ako trebas jednostavno ocitavanje koji je taster pritisnut, ali dok je forma programa u fokusu, te ako ne trebas neke naprednije mogucnosti, dovoljan je override
OnKeyDown i OnKeyUp metoda forme.

Evo nekog primjera:

Code:

public class Form1 : Form
    {
        public Form1()
        {
            // kod konstruktora forme
        }

        protected override void OnKeyDown(KeyEventArgs e)
        {
            label1.Text = e.KeyCode.ToString();
        }

        protected override void OnKeyUp(KeyEventArgs e)
        {
            label1.Text = e.KeyCode.ToString() + "UP";
        }
    }


Ako trebas da se drzanjem tastera salju signali u nekom nizu, treba ti jos par nekih stvari, ali princip je jednostavan:
1. odredi interval koji zelis, i kreiraj timer sa tim intervalom
2. postavi neku bool variablu (neki flag), koja ce se setovati true u ovoj event handler metodi za detektovanje pustanja tastera. Mozes ispitivati uslov e.KeyCode.ToString() == "W" ili nesto sta ti vec treba.
3. u Tick() timera, salji po jedan signal tamo gdje vec treba, sve dok se ne detektuje da je onaj flag od maloprije true, tada ugasi timer.


I zadnje, ako ti treba bilo sta od ovoga, ali u komplikovanijem obliku sto se pritiskanja tastera tice (npr. ako forma aplikacije nije u fokusu, ali zelis da pritiskom na W bude odradjeno sta zelis), moraces koristiti globalne low-level dogadjaje OS-a. Pod ovim mislim na nesto sto se zove keyboard hooks. Imas dosta finih tekstova na Internetu o tome, evo par primjera:

http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx
http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
http://support.microsoft.com/kb/320584