2009-09-23 6 views
0

Je veux m'inscrire lorsque la touche "Tab" a été enfoncée, mais je n'arrive pas à comprendre comment utiliser la fonction ProcessDialogKey.C# Comment utiliser la fonction ProcessDialogKey pour capturer des caractères spéciaux tels que "Tab", "Up", etc.

C'est ce que je suis:

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Keypress);  

private void Keypress(object sender, KeyPressEventArgs e) 
{ 
    MessageBox.Show("button: " + e.KeyChar); 
} 

Cela ne peut capturer les caractères réguliers, mais je dois aussi d'autres comme « Tab » etc ....

donc j'ai étudié un peu et trouvé que beaucoup avaient utilisé le ProcessDialogKey, mais je suis incertain comment l'utiliser.

voici ce que je suis:

protected override bool ProcessDialogKey(Keys keyData) 
{ 
    switch (keyData) 
    { 
     case Keys.Up: 
      MessageBox.Show("Up"); 
      break; 
     case Keys.Tab: 
      MessageBox.Show("Tab"); 
      break; 
     default: 
      break;   
    } 
} 

Je reçois l'erreur: 'project.frm_test.ProcessDialogKey(System.Windows.Forms.Keys)': no suitable method found to override

Qu'est-ce que je fais mal?

Et ours avec moi ... Je suis habitué à php :) donc je suis un peu nouveau à C# :)

Répondre

1

Votre code fonctionne, vous boîte de message est simplement afficher le caractère de tabulation c.-à-blanc espace.

Cast int * et vous verrez qu'il fonctionne:

MessageBox.Show("button: " + (int) e.KeyChar); 

EDIT: regarder ailleurs à ce code:

public Form1() 
{ 
    InitializeComponent(); 

    this.KeyPress += new KeyPressEventHandler(this.Form1_KeyPress); 
    this.KeyDown += new KeyEventHandler(this.Form1_KeyDown);    
} 

// Keypress only handles keys in the ascii range 
private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    MessageBox.Show("KeyPress: " + (int) e.KeyChar); 
} 

// Keydown will work for all keys 
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    MessageBox.Show("KeyDown: " + e.KeyCode); 
}   
Questions connexes