2016-12-08 4 views
0

Ich bin ein ziemlich neues Visual C#, aber in Delphi für eine lange Zeit codiert. Ich habe ein Formular erstellt, das über ein einfaches Fenster verfügt, das ausgeblendet wird, wenn Sie einen bestimmten Schlüssel auf der Tastatur eingeben (ich habe "KeyPreview" für True für das Formular festgelegt und ich verwende das KeyDown-Ereignis, um zu ermitteln, ob der richtige Schlüssel ist wurde gedrückt und um das Panel sichtbar/unsichtbar zu machen). Direkt unter dem Panel befindet sich eine webBrowser-Komponente.Sicherstellen, dass ein C# Formular Fokus hat, wenn es sollte

Was geschieht wie folgt:

Wenn meine Form zunächst beginnt, ich habe Code für das „gezeigt“ Ereignis, das die Form sorgt dafür, den Fokus hat zunächst:

private void Form1_Shown(object sender, EventArgs e) 
{ 
    if (!Focused) 
    { 
     Focus(); 
    } 
} 

Wenn die Form Konzentriert an diesem Punkt, funktioniert mein Code für die Erkennung der richtigen Tastenanschlag, um das Panel zu erscheinen oder zu verschwinden funktioniert gut.

Hier wird es seltsam und ich bin mir nicht sicher, was ich tun soll. Es gibt zwei Teile, mit denen ich zu tun habe, was falsch ist:

  1. Wenn ich auf einem anderen Formular klicken und dann auf der Titelleiste meiner Form wieder Fokus auf meine Form zu erhalten und einen Tastendruck versuchen, die Tastendruck Erkennung funktioniert nicht. Wenn ich jedoch noch einmal auf ein anderes Formular und dann wieder auf mein Formular klicke, funktioniert die Tastenanschlagserkennung für das Formular. Was kann ich tun, um sicherzustellen, dass dies jedes Mal funktioniert, wenn mein Fokus wieder aktiviert ist?

  2. Wenn ich auf die Webbrowser-Komponente in meinem eigenen Formular klicke, wird der KeyDown-Code für das Formular nicht mehr ausgeführt. Selbst wenn ich auf die Titelleiste für das Formular klicke, funktioniert das KeyDown-Ereignis nicht. Was muss ich tun, um sicherzustellen, dass mein Formular beim Klicken auf eine Komponente in meinem Formular immer noch auf das KeyDown-Ereignis reagiert?

Vielen Dank im Voraus für eine Beratung.

+0

Können Sie den Code für Ihre Titelleiste anzeigen? –

+0

Das ist es einfach. Ich habe keinen Code für die Titelleiste. Ich habe nur Code für ein KeyDown-Ereignis für das Formular selbst. – Andre72127

Antwort

0

Ich kann nicht sagen, warum Ihre Titelleiste Schlüsselereignisse abzufangen scheint. Es kann sein, dass verschiedene Komponenten im Formular den Fokus haben und somit Tastaturereignisse erfassen können. Ich weiß, dass die Webbrowser-Steuerung auf diese Weise funktioniert. Möglicherweise möchten Sie Tastaturereignisse global erfassen.

Ich sah etwas auf Codeproject, das zeigt, wie dies zu tun ist. Ich hoffe das hilft.

Sie verwenden UserActivityHooks.

UserActivityHook actHook; 
void MainFormLoad(object sender, System.EventArgs e) 
{ 
    actHook= new UserActivityHook(); // crate an instance 

// hang on events 

    actHook.OnMouseActivity+=new MouseEventHandler(MouseMoved); 
    actHook.KeyDown+=new KeyEventHandler(MyKeyDown); 
    actHook.KeyPress+=new KeyPressEventHandler(MyKeyPress); 
    actHook.KeyUp+=new KeyEventHandler(MyKeyUp); 
} 

Wie für die Webbrowser-Steuerung wird es natürlich Tastaturereignisse erfassen. Benutzer müssen oft Text in Formularen eingeben und Entwickler kodieren oft JavaScript auf Webseiten, um sich in Tastaturereignisse einzuklinken. Das Webbrowser-Steuerelement muss also in der Lage sein, diese zu erfassen.

Verwandte Themen