c # - Første tastetryk er tabt, når Windows Shell erstattes med Windows Forms-applikationen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har succesfuldt erstattet Windows Shell efter fremgangsmåden i dette SO spørgsmål.


Jeg har imidlertid opdaget, at den første nøglepresse er tabt og er lidt irriterende for brugeren. Den løsning, vi har forsøgt, er at aktivere formularen i OnShown-arrangementet:


private void OnShownLoginForm(object z\_sender, EventArgs z\_e)
{
    Activate();
    m\_loginTextBox.Focus();
}


Men det har ikke løst problemet. Har du nogen anelse om, hvad der sker?

Bedste reference


Du kan forsøge at bruge System.Windows.Forms.SendKeys Class (MSDN-dokumentation) til at sende en tastetryk hændelse til formularen, når i Form Load-hændelsen. Hvis det ikke hjælper, så prøv at sende tastaturhændelserne i Form.Shown-begivenheden, da Form.Shown er den sidste begivenhed i opstartsprocessen. [5]

Andre referencer 1


Lyder som noget, der skyldes måske en anden kontrol, der får fokus først. Har tekstboksen en taborder, og kan du indstille den til 0? Fokus bør så være på det efter formularens belastninger.


Ellers kan du prøve at oprette en ny formular til at teste med, det virker ikke reproducerbart.

Andre referencer 2


Jeg ved ikke, om det er relateret, men jeg havde et lignende problem, hvor tabindexegenskaben til en webform ikke fungerede ved at trykke på TAB-tasten efter at have fokuseret på den første indlæsning på sidebelastning, indtil brugeren først klikede på formularen med mus.


Jeg havde ikke adgang til kildekoden, så jeg forsøgte at løse det med javascript.

Indtil det første museklik blev alle tastaturstreger, herunder TAB-tasten, aktiveret tastetrykket, blev TAB-tasten ikke opdaget af keydown/keyup på sidebelastning.


Jeg lærte, at TAB-nøglen aktiverede tastetrykket og jeg kunne få adgang til nøglekoden gennem den. Du skal blot registrere tastaturhændelsen og manuelt skifte til næste indgang, hvor jQuery har arbejdet.
Efter det første museklik blev formularen opført som forventet, blev TAB-tasten ikke længere fanget af tastetrykhændelsen.


her er en kodeeksempel:


function tabNext(e){
    if(e.keyCode == 9){
        // do work
    }
}

$('input').keypress(tabNext);