C#: le control suivant dans un paneau [Résolu]

sympatie0 13 Messages postés lundi 19 mars 2007Date d'inscription 23 mai 2009 Dernière intervention - 18 avril 2009 à 18:11 - Dernière réponse : krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention
- 20 avril 2009 à 10:49
Bonjour,
Dans le cadre d'un TP j'ai une matrice representé par plusieurs TextBox alignés dans un tableLayoutPanel afin de facilité la saisie de la matrice par le clavier en appuyant sur la touche fleche -> le controle suivant ai le focus MAIS je ne sais pas comment avoir la position du textbox qui a le focus dans le tableLayoutPanel pour l'attribuer au textbox suivant.

Merci d'avance.

PS: je cherche uniquement à avoir la position du controle dans le paneaux càd le num de la ligne et de la colonne.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 19 avril 2009 à 00:01
3
Merci
En effectuant un cast de la référence obtenue via le paramètre sender vers le type attendu :

if ( sender == null )
{
  // TODO : gérer l'erreur, référence nulle inattendue
}
else
{
  // Tentative de cast
  TextBox txtBox = sender as TextBox;

  if ( txtBox == null )
  {
    // TODO : gérer l'erreur, type inattendu
  }
  else
  {
    // TODO : effectuer les validations complémentaires
    // Plus qu'à coder le reste
  }
}

/*
coq
MVP Visual C#
CoqBlog
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 18 avril 2009 à 19:38
0
Merci
Bonjour,

La méthode GetCellPosition disponible sur la classe TableLayoutPanel te donnera celà.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
sympatie0 13 Messages postés lundi 19 mars 2007Date d'inscription 23 mai 2009 Dernière intervention - 18 avril 2009 à 22:09
0
Merci
Merci coq ^^ mais je programme ça dans la procedure de l'evenement KeyDown alors que je n'ai que l'event E et l'objet sender comme parametre, je voudrais juste savoir quel est le textbox sur le quel l'utilisateur a appuié la touche fleche pour pouvoir utiliser GetCellPosition ou bien GetPositionFromControl

Thanks :D
Commenter la réponse de sympatie0
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 18 avril 2009 à 22:24
0
Merci
Ha, je n'avais pas compris la question dans ce sens là.

Quand tu parles de l'event KeyDown, tu parles de celui de chaque TextBox que tu as lié à un seul gestionnaire d'évènement ?
Si c'est bien le cas, il te suffit d'utiliser sender : il s'agit du contrôle ayant levé l'évènement.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
sympatie0 13 Messages postés lundi 19 mars 2007Date d'inscription 23 mai 2009 Dernière intervention - 18 avril 2009 à 23:47
0
Merci
Oui c bien ça  chaque textBox est lié à l'evennement keyDown ^^ et j'ai pas su utilisé sender.


Eh comment faire ça?! svp
Commenter la réponse de sympatie0
WishhhMaster 327 Messages postés mardi 17 février 2004Date d'inscription 10 avril 2010 Dernière intervention - 19 avril 2009 à 00:02
0
Merci
Salut,

Tu peux faire comme ça
TextBox txt = sender as TextBox;
ou comme ça
TextBox txt = (TextBox)sender;
Commenter la réponse de WishhhMaster
Tilois 721 Messages postés dimanche 10 juin 2001Date d'inscription 27 mars 2011 Dernière intervention - 19 avril 2009 à 09:27
0
Merci
Si le but est simplement de passer d'un controle a un autre, pourquoi ne pas simplement mettre correctement les taibindex sur les textbox et ensuite passer au suivant (avec l'evenement keydown) en invoquant la méthode Control.SelectNextControl ?

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.selectnextcontrol.aspx
Commenter la réponse de Tilois
sympatie0 13 Messages postés lundi 19 mars 2007Date d'inscription 23 mai 2009 Dernière intervention - 19 avril 2009 à 21:20
0
Merci
Merci merci à tous de votre aide, ça marche bien ^^
Commenter la réponse de sympatie0
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 20 avril 2009 à 10:49
0
Merci
Salut

"Tu peux faire comme ça
TextBox txt = sender as TextBox;
ou comme ça
TextBox txt = (TextBox)sender;"

Je crois que "as" est plus rapide que le cast (type).
Cependant, la grosse différence est lors de l'échec :
si, dans les deux exemples, le sender ne peut pas être converti en TextBox,

dans le premier exemple, txt sera null,
dans le deuxième exemple, une exception sera levée.

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.