2010-08-24 7 views
3

J'ai un WinForm avec 3 boîtes de groupe, une avec des listes déroulantes et deux avec des boutons radio. J'ai mis tous les contrôles et leurs enfants à "TabStop = false", mais quand je cycle avec TAB, le bouton radio actuellement sélectionné dans chacune des deux dernières boîtes de groupe est focalisé.WinForm - TabStop ne fonctionne pas

S'il n'y a aucun moyen de changer ce comportement, quel serait un bon événement à attraper et à déplacer le focus? Je ne trouve pas d'événement "OnFocus".


La solution est de définir une méthode (le code ci-dessous) pour gérer l'événement « Entrée » de chaque bouton radio sous la forme (si c'est ce que vous voulez). En fait, je ne l'ai fait que pour les boutons radio de la première boîte de groupe et cela a fonctionné, les boutons radio de la deuxième boîte de groupe ne sont pas mis au point, même si leurs événements "Entrée" ne sont pas gérés. Ce n'est pas le comportement que vous auriez attendu.

private void radiobuttonXGroup1_Enter(object sender, EventArgs e) 
{ 
    SomeOtherControl.Focus(); 
} 

dans le fichier * .Designer.cs vous modifiez chaque événement Entrée (pour chaque bouton radio) pour pointer vers un gestionnaire d'événements (la méthode ci-dessus).

this.radiobutton1Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter); 
this.radiobutton2Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter); 
this.radiobutton3Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter); 
+0

winforms, webforms, ou wpf? – Robaticus

+1

@Robaticus, la question commence par "J'ai un WinForm ...]" – Kashif

+0

J'ai édité la question en réponse à la question Robaticus. Le problème est que mon navigateur ne fonctionne plus avec le site StackOverflow. Je ne peux que modifier les questions déjà postées, mais je ne peux pas poster de nouvelles questions ou ajouter des commentaires (en utilisant Firefox maintenant). – OIO

Répondre

5

La documentation MSDN pour RadioButton.TabStop indique « Cette API prend en charge l'infrastructure .NET Framework et n'est pas destiné à être utilisé directement à partir de votre code ». Ce qui signifie fondamentalement, "Cela ne va pas fonctionner comme vous l'attendez". Cela dit, l'événement Enter se déclenchera lorsque le bouton recevra le focus. Vous pouvez essayer de l'utiliser pour déplacer le focus sur un autre contrôle.

+0

Oui, vu qu'il y a quelques minutes, j'espérais que le TabStop fonctionnerait, il semble plus élégant, et ce sont seulement les boutons radio qui ne fonctionnent pas, les autres contrôles le font. – OIO

+0

Merci d'avoir signalé le bon événement pour le travail. – OIO

5

Définir TabStop sur False sur un RadioButton pour empêcher le tabulation de la commande fonctionne jusqu'à ce que vous ayez sélectionné actully le bouton radio sans aucun remplacement supplémentaire comme suggéré par @msergeant.

EDIT

Le code suivant empêche le code d'obtenir un onglet événement clé:

private void radioButton1_CheckedChanged(object sender, EventArgs e) 
{ 
    radioButton1.TabStop = false; 
} 

Les boutons radio se comportent différemment par rapport à l'onglet d'autres contrôles en ce sens qu'ils travaillent dans des ensembles ou des groupes basé sur le réglage de l'index des onglets ou en plaçant les boutons radio dans une boîte de groupe.

+1

Merci pour l'info.Je pense toujours que ce n'est pas un comportement attendu, le comportement attendu aurait été que les boutons radio ne se concentrent pas sur une touche TAB s'ils sont définis sur TabStop = false (comme les autres contrôles). – OIO

+0

Merci de votre commentaire m'a fait réfléchir un peu plus sur votre question et ma réponse. – Zamboni

+0

Merci d'avoir pris le temps. J'ai comparé les deux événements et l'événement "Enter" semble être le bon: "Se produit quand le contrôle devient le contrôle actif du formulaire." vs "Se produit chaque fois que la propriété 'checked' change de valeur." Lorsque vous faites défiler les contrôles avec la touche TAB, la propriété "checked" des boutons radio ne change pas, ils obtiennent seulement la mise au point – OIO