C#: le control suivant dans un paneau

Résolu
sympatie0 Messages postés 13 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 23 mai 2009 - 18 avril 2009 à 18:11
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 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.

9 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 avril 2009 à 00:01
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
*/
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 avril 2009 à 19:38
Bonjour,

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

/*
coq
MVP Visual C#
CoqBlog
*/
0
sympatie0 Messages postés 13 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 23 mai 2009
18 avril 2009 à 22:09
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
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 avril 2009 à 22:24
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
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sympatie0 Messages postés 13 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 23 mai 2009
18 avril 2009 à 23:47
Oui c bien ça  chaque textBox est lié à l'evennement keyDown ^^ et j'ai pas su utilisé sender.


Eh comment faire ça?! svp
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
19 avril 2009 à 00:02
Salut,

Tu peux faire comme ça
TextBox txt = sender as TextBox;
ou comme ça
TextBox txt = (TextBox)sender;
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
19 avril 2009 à 09:27
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
0
sympatie0 Messages postés 13 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 23 mai 2009
19 avril 2009 à 21:20
Merci merci à tous de votre aide, ça marche bien ^^
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
20 avril 2009 à 10:49
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 -
0
Rejoignez-nous