2016-03-15 1 views
0

Dites-moi, s'il vous plaît, comment puis-je montrer à StatusStrip lorsque la touche CAPS_LOCK est activée. J'ai essayé de suivre les exemples: one et two mais rien ne s'affiche dans mon application. J'ai créé un nouveau projet, ajouté StripStatusLabel et essayé d'apporter des informations. Il est étrange que l'affichage est obtenu que dans la méthode d'initialisation:État de Num Caps ScrollLock dans StatusStrip WindowsForms

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     toolStripStatusLabel1.Text = "111"; 
    } 
} 

mais dans d'autres méthode, il est ne fonctionne pas.

using System.Diagnostics; 
namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      //toolStripStatusLabel1.Text = "111"; 
     } 
     public void Form2_KeyDown(object sender, KeyEventArgs e) 
     { 
      Debug.Write("123"); 
      toolStripStatusLabel1.Text = "222"; 
     } 
    } 
} 

Windows Forms. NetFramework 4.5 P.S. désolé pour la question stupide :)


MISE À JOUR: enter image description here

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Diagnostics; 

namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      KeyDown += tst; 
     } 

     public void TextBoxTest() 
     { 
      textBox1.Text = "onetwo"; 
     } 

     private void tst(object sender, KeyEventArgs e) 
     { 
      if ((e.KeyCode & Keys.KeyCode) == Keys.CapsLock) 
      { 
       if (Control.IsKeyLocked(Keys.CapsLock)) 
        toolStripStatusLabel1.Text = "Caps"; 
      } 
     } 
    } 
} 

Mais la sortie ne fonctionne pas. Dites-moi s'il vous plaît ce que je fais mal

+1

L'utilisation de l'événement KeyDown du formulaire n'est pas suffisante, il ne peut être déclenché que si le formulaire ne dispose pas de contrôles pouvant obtenir le focus et obtenir ainsi l'événement KeyDown. [Lisez ceci] (http://stackoverflow.com/a/400325/17034). –

+0

Puisque 'CapsLock' peut être activé ou désactivé lorsque votre application n'a pas de focus, vous pouvez vérifier l'état de' CapsLock' dans l'événement 'Application.Idle' en tant que solution simple et fiable. La gestion des événements de clavier du formulaire ne suffit pas pour détecter les modifications sur l'état de verrouillage des clés et vous devez également placer votre logique dans d'autres endroits comme l'événement d'activation de votre formulaire ou enregistrer un raccourci clavier global. –

Répondre

-1

Je l'ai résolu:

protected override void WndProc(ref Message m) 
{ 
    base.WndProc(ref m); 
    capsStatusLabel.ForeColor = IsKeyLocked(Keys.CapsLock) ? statusStrip1.ForeColor : statusStrip1.BackColor; 
    numStatusLabel.ForeColor = IsKeyLocked(Keys.NumLock) ? statusStrip1.ForeColor : statusStrip1.BackColor; 
} 

Merci à tous!

0

// Caps Lock

toolStripStatusLabel1.Text=IsKeyLocked(Keys.CapsLock).toString(); 

// Num Lock

toolStripStatusLabel1.Text=IsKeyLocked(Keys.NumLock).toString(); 

Set propriété KeyPreview de votre formulaire pour définir vrai écrire ce code est l'événement de key_down Votre formulaire

Avant cela, vous ne pouvez pas mettre de texte dans une fonction autre que IntializeComponent car la propriété KeyPreview de votre formulaire est définie sur false. Ure, il est sûr de faire l'événement clé vers le bas travail