Maison  >  Article  >  développement back-end  >  Deux méthodes pour changer le focus de contrôle à l'aide des touches fléchées et de la touche Entrée en C#

Deux méthodes pour changer le focus de contrôle à l'aide des touches fléchées et de la touche Entrée en C#

零下一度
零下一度original
2017-06-23 16:24:452910parcourir

Environnement : il y a TextBox, ComboBox et d'autres contrôles sur l'interface.

Il n'est pas recommandé d'utiliser à la fois les touches fléchées gauche et droite pour changer de focus, sinon il vous sera gênant de modifier la position du caractère du curseur dans la TextBox.

Méthode 1 : Méthode stupide, le traitement des événements doit être enregistré séparément pour chaque contrôle

Prenons TextBox comme exemple, le code est le suivant :

 1 private void textbox_KeyDown(object sender, KeyEventArgs e)         
 2 {             
 3     if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)             
 4     {                 
 5         e.SuppressKeyPress = true;                 
 6         System.Windows.Forms.SendKeys.Send("{Tab}");             
 7     }             
 8     else if (e.KeyCode == Keys.Up)             
 9     {                 
10         e.SuppressKeyPress = true;                 
11         System.Windows.Forms.SendKeys.Send("+{Tab}");             
12     }         
13 }

Méthode 2 : Méthode simple, pas besoin d'enregistrer le traitement des événements séparément pour chaque contrôle, ajoutez simplement le code suivant à la classe du formulaire :

 1 //上、下方向键,及回车键切换控件焦点 2 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 3 { 4     Keys key = (keyData & Keys.KeyCode); 5     if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)             
 6     {                                  
 7       System.Windows.Forms.SendKeys.Send("{Tab}"); 
 8       return true;            
 9     }             
10     else if (e.KeyCode == Keys.Up)             
11     {                                  
12       System.Windows.Forms.SendKeys.Send("+{Tab}");13       return true;             
14     }   
15     return base.ProcessCmdKey(ref msg, keyData);16 }

À ce stade, la fonction de changement de focus de contrôle a été implémentée. Il existe désormais deux contrôles ComboBox cmbMeas et cmbRemark sur l'interface du formulaire. être soumis lorsque vous appuyez sur Entrée. Au lieu de changer de focus, que dois-je faire ? Ensuite, vous devez déterminer si le contrôle qui a actuellement le focus est cmbMeas ou cmbRemark. Le code ci-dessus doit être légèrement modifié. Le code spécifique est le suivant :

 1 //API声明:获取当前焦点控件句柄       2 [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)] 3 internal static extern IntPtr GetFocus(); 4  5 //获取当前拥有焦点的控件 6 private Control GetFocusedControl() 7 { 8      Control focusedControl = null; 9      // To get hold of the focused control:10      IntPtr focusedHandle = GetFocus();11      if (focusedHandle != IntPtr.Zero)12          //focusedControl = Control.FromHandle(focusedHandle);13          focusedControl = Control.FromChildHandle(focusedHandle);14      return focusedControl ;15  }16 17 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)18 {19     Keys key = (keyData & Keys.KeyCode);20     Control ctrl = GetFocusedControl();21     if (e.KeyCode == Keys.Down || (key == Keys.Enter && ctrl.Name != "cmbMeas" && ctrl.Name != "cmbRemark"))             
22     {                                  
23         System.Windows.Forms.SendKeys.Send("{Tab}"); 
24         return true;            
25     }             
26     else if (e.KeyCode == Keys.Up)             
27     {                                  
28         System.Windows.Forms.SendKeys.Send("+{Tab}");29         return true;             
30     }   
31     return base.ProcessCmdKey(ref msg, keyData);32 }

Instructions :

La méthode Control.FromHandle

renvoie le contrôle actuellement associé au handle spécifié ; si aucun contrôle avec le handle spécifié n'est trouvé, une référence nulle est renvoyée.

Méthode Control.FromChildHandle

Si vous devez renvoyer un contrôle avec plusieurs handles, vous devez utiliser la méthode FromChildHandle.

Cette méthode recherche la chaîne parent du handle de fenêtre jusqu'à ce qu'elle trouve le handle associé au contrôle. Cette méthode est plus fiable que la méthode FromHandle car elle renvoie correctement les contrôles avec plusieurs poignées.

Pour les contrôles définis par l'utilisateur, la méthode FromChildHandle doit être utilisée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn