Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 Redbaron
Redbaron

C # și tastele cu săgeți

Sunt nou la C # și fac o lucrare într-o aplicație existentă. Am un vizualizator DirectX care are componente pe care vreau să le pot poziționa folosind tastele săgeată.

În prezent, eu sunt overriding ProcessCmdKey și de captură săgeată de intrare și a trimite un eveniment OnKeyPress. Acest lucru funcționează, dar vreau să pot utiliza modificatori ( ALT + CTRL + SHIFT ). De îndată ce țin un modificator și apăs o săgeată nu se declanșează niciun eveniment pe care îl ascult.

Are cineva idei sau sugestii cu privire la locul unde ar trebui să merg cu asta?

22 2008-08-07T15:23:28+00:00 2
Programare
user-interface
directx
c#
Comentarii la întrebare (0)
Tokabi
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#5026

În cadrul procesului de procesare suprascris, cum determinați ce tastă a fost apăsată?

Valoarea keyData (al doilea parametru) se va schimba în funcție de tasta apăsată și de orice tastă modificator, de exemplu, apăsând săgeata stânga va reveni codul 37, schimbarea stânga va reveni 65573, ctrl-stânga 131109 și alt-stânga 262181.

Puteți extrage modificatorii și tasta apăsată de ANDing cu valorile enum corespunzătoare:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    bool shiftPressed = (keyData & Keys.Shift) != 0;
    Keys unmodifiedKey = (keyData & Keys.KeyCode);

    // rest of code goes here
}
0
0
Comentarii (0)
cdiggins
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#2033811

Am anunțat răspunsul Tokabi , dar pentru compararea cheilor există câteva sfaturi suplimentare despre < a href = "https://stackoverflow.com/questions/1369312/c-keys-enumeration-confused-keys-alt-or-keys-rbutton-keys-shiftkey-keys-alt/2033796#2033796"> StackOverflow.com aici . Iată câteva funcții pe care le-am folosit pentru a simplifica totul.

   public Keys UnmodifiedKey(Keys key)
    {
        return key & Keys.KeyCode;
    }

    public bool KeyPressed(Keys key, Keys test)
    {
        return UnmodifiedKey(key) == test;
    }

    public bool ModifierKeyPressed(Keys key, Keys test)
    {
        return (key & test) == test;
    }

    public bool ControlPressed(Keys key)
    {
        return ModifierKeyPressed(key, Keys.Control);
    }

    public bool AltPressed(Keys key)
    {
        return ModifierKeyPressed(key, Keys.Alt);
    }

    public bool ShiftPressed(Keys key)
    {
        return ModifierKeyPressed(key, Keys.Shift);
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (KeyPressed(keyData, Keys.Left) && AltPressed(keyData))
        {
            int n = code.Text.IndexOfPrev('<', code.SelectionStart);
            if (n < 0) return false;
            if (ShiftPressed(keyData))
            {
                code.ExpandSelectionLeftTo(n);
            }
            else
            {
                code.SelectionStart = n;
                code.SelectionLength = 0;
            }
            return true;
        }
        else if (KeyPressed(keyData, Keys.Right) && AltPressed(keyData))
        {
            if (ShiftPressed(keyData))
            {
                int n = code.Text.IndexOf('>', code.SelectionEnd() + 1);
                if (n < 0) return false;
                code.ExpandSelectionRightTo(n + 1);
            }
            else
            {
                int n = code.Text.IndexOf('<', code.SelectionStart + 1);
                if (n < 0) return false;
                code.SelectionStart = n;
                code.SelectionLength = 0;
            }
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire