Form_KeyDown event werkt niet bij Keys.Enter/Keys.Return

Status
Niet open voor verdere reacties.

HelpElec

Gebruiker
Lid geworden
6 mrt 2013
Berichten
102
Hallo allemaal,

Ik heb een Form met een KeyDown event en de KeyPreview property op true gezet. Nu wordt het keydown-event aangeroepen bij het indrukken van iedere toets, behalve bij de enter-toets.

Op forums werd verwezen naar de AcceptButton property van het form, maar dat is niet de oplossing. Iemand een idee hoe je ervoor kunt zorgen dat de enter-toets een event (als het niet kan met de KeyDown, dan een ander event) triggert?

Bedankt!
 
Hoe ziet je KeyDown handler er uit? Dit zou het moeten doen:

Code:
private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
       //Enter toets ingedrukt
    }
}
 
Laatst bewerkt:
De Eventhandler:

Code:
private void FormNK_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.NumPad0:
                    MessageBox.Show("0");
                    break;
               case Keys.Return:
                    MessageBox.Show("RETURN");
                    break;
            }
        }

Ik kan bij KeyEventArgs geen property Key krijgen (?).
Nu krijg ik dus wel een popup met "0" als ik numeric 0 indruk, maar niet bij enter.
 
Dit werkt voor mij

[CPP]if (e.Key == VirtualKey.Enter)
{
Debug.WriteLine("ENTER");
}[/CPP]
 
Vreemd, is dat wel C#, omdat er CPP Code staat?
Ik gebruik C#, Visual Studio 2010 en .NET 4.
Maar als ik een KeyDown event aanmaak op een Form heeft de KeyEventArgs niet de "Key" property zoals bij jullie. Wel KeyCode, KeyData en KeyValue.
 
Je kunt de key data gebruiken of de key value als je dat liever doet



Code:
if (e.KeyData == Keys.Return)
{
    //handle enter
}


Code:
switch (e.KeyData)
{
    case Keys.Return:
        //handle enter
        break;
}


Code:
switch (e.KeyValue)
{
    case (int)Keys.Return:
        //handle enter
        break;
}
 
Okay, dan kan dat het probleem niet zijn. Maar hij blijft Return/Enter niet herkennen. Enig idee verder nog?
Bedankt
 
Vaag. Heb je het in een bestaand programma getest of in een nieuw project met alleen een form en dit event?
Als je form geen focus heeft zal hij ook niet reageren op het keydown event omdat een ander control de focus heeft.

Krijg je zonder if checks met deze method ook niets te zien als je op enter drukt? (met een leeg form)
Code:
private void FormKeyDownEventTrigger(object sender, KeyEventArgs e)
{
    var message = string.Format("The '{0}' key was pressed, and it has a value of '{1}'", e.KeyData, e.KeyValue);

    MessageBox.Show(message);
}
 
Het form staat in een apart Class Library project en die gebruik ik dan als DLL in andere projecten. Maar als ik inderdaad probeer wat jij zei: met een messagebox de key aangeven, werkt dat bij alle keys, behalve enter.

Maar ik weet denk ik wat er mis gaat. Ik heb nu een Key-up event op het Form en dan werkt het wel. Maar omdat er op het form alleen maar buttons staan triggert een druk op enter altijd een Click-event op de button die de focus heeft. Bij het key-up event wordt eerst de click afgehandelt, daarna de key-up. Bij een key-down wordt alleen de click afgehandelt.

Mogelijk?
 
Werkt het ook nog bij alle andere keys na een maal op enter te hebben geklikt?

Wat voor iets voer je uit als je op enter drukt (kan het niet gewoon in het button click event aangezien het form alleen maar buttons heeft?)
Misschien kun je bij alle buttons ook deze method gebruiken bij een keydown als de button focus heeft?
 
Hallo,

Ja het blijft nu gewoon werken, ook na op enter gedrukt te hebben.
Wat ik wil is een Form met een num Keypad, waarbij het zowel mogelijk moet zijn om op de Buttons op het Form te klikken, als gewoon gebruik te maken van je num keypad op je toetsenbord.
Hij heeft een property
Code:
char Pressed_Char
waarin de char van de laatst gekozen button/toets staat, die property verandert bij een Button_Click of een Form_KeyUp. Daar gaat het dus mis. Enter triggert het Button_Click, wat dus iedere button kan zijn die dan toevallig de focus heeft.

Pressed_Char heeft een onPropertyChange event wat ik wil gebruiken op andere forms om alle chars af te vangen en bijvoorbeeld in een Textbox te zetten, of een berekening mee te doen.

Wat ik vooral gek vind is dat bij de combinatie Button_Click en Key_Down er bij het indrukken van enter wel het Button_Click event optreedt, maar niet het Key_Down. Zitten er in C# prioriteiten aan events? Zo ja, kun je die wijzigen?
 
Ok, heb het een en ander nagemaakt en zie nu wat je beschrijft.

Je zou de focus van de button kunnen verwijderen na een click event (bijvoorbeeld een label (wat de gebruiker niet kan zien) de focus geven)
 
Okay bedankt!
Ik kijk nu binnen het click-event naar het type EventArgs. Als het type MouseEventArgs is, handelt hij de handler verder af. Net als jouw oplossing een workaround dus.
Code:
private void BtnKeyPad_Click(object sender, EventArgs e)
{
 if (e.GetType() == typeof(MouseEventArgs))
{
//Handler
}
}
Gebruik jij een Key_Down op het Form en zo ja werkt dat met een extra onzichtbaar label?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan