Accueil > > > CONTROLE TEXTBOX POUR LA SAISIE D'ADRESSE IP.
CONTROLE TEXTBOX POUR LA SAISIE D'ADRESSE IP.
Information sur la source
Description
Dans un projet je suis emmené à demander à l'utilisateur d'entrer une adresse IP et un port. A chaque fois, je faisais toujours la même manipulation pour la partie graphique et la validation de l'adresse. Je me suis dis qu'il serait peut être plus intelligent de créer mon propre composant que j'utiliserai lorsque j'en aurais besoin. Ce controle permet de présenter à l'utilisateur une zone de saisie d'adresse IP et un port. La validité des valeurs est contrôlée durant la frappe et après la frappe. L'adresse IP entrée peut être récupérée au format String, byte[] ou IPAddress. On peut, en utilisant ces même formats, remplir la partie adresse IP. La saisie de l'adresse IP est aider avec des déplacement du focus automatique.
Source
- //Voici certaines fonctions utilisées pour controlé la validité de l'adresse
- //ainsi que la fonction et variable pour récupérer et assigné la valeur.
-
-
- /// <summary>
- /// Variable permettant de définir ou de récupérer l'adresse
- /// IP du composant au format String
- /// </summary>
- public String stringIP
- {
- set
- {
- try
- {
- String[] txtIp = value.Split(new char[1]{'.'});
- textBox1.Text = txtIp[0];
- textBox2.Text = txtIp[1];
- textBox3.Text = txtIp[2];
- textBox4.Text = txtIp[3];
- }
- catch
- {
- throw new Exception(string.Format("La valeur donnée n'est pas valide."));
- }
- }
- get
- {
- return getIPInString();
- }
- }
-
- /// <summary>
- /// Cette fonction teste si il la valeur du texBox sender
- /// est correcte.
- /// Si oui, on laisse changer de controle.
- /// Sinon, on reste sur ce controle et on selectionne le texte.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void IPTextBoxLeave(object sender, System.EventArgs e)
- {
- if(((TextBox)sender).Text == "") return;
- if(!IsNumeric(((TextBox)sender).Text))
- {
- ((TextBox)sender).Focus();
- ((TextBox)sender).SelectAll();
- return;
- }
- else
- {
- int value = Convert.ToInt32(((TextBox)sender).Text);
- if((value<0) || (value>255))
- {
- ((TextBox)sender).Focus();
- ((TextBox)sender).Select(0,((TextBox)sender).Text.Length);
- return;
- }
- }
- }
-
- /// <summary>
- /// Fonction appelée à l'appuis d'une touche clavier.
- /// Elle teste la validitée de cette dernière avant de l'inscrire.
- /// Si elle est correcte, on laisse la touche s'exécuter.
- /// Sinon, on l'inhibe.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void textBoxKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
- {
- // Si la caractère tapé est numérique
- if (char.IsNumber(e.KeyChar))
- {
- if (e.KeyChar == '²') e.Handled = true; // Si c'est un '²', on gère l'evenement.
- else e.Handled = false; // Sinon, on laisse passer le caractère (On peut omettre cette ligne)
- }
- // Si le caractère tapé est un caractère de "controle" (Enter, backspace, ...), on laisse passer
- else if (char.IsControl(e.KeyChar))
- {
- if(e.KeyChar == Convert.ToChar(8)&& ((TextBox)sender).Text.Length ==0 )
- {
- //si touche suppr et textbox vide,on passe au précédent
- this.SelectNextControl((TextBox)sender,false,false,false,true);
- }
- e.Handled = false;
- }
- // Si on appuit sur '.', on passe à l'autre nombre de l'IP (sauf dernier nombre et le port )
- else if (e.KeyChar == '.' && !((TextBox)sender).Equals(textBox5) && !((TextBox)sender).Equals(textBox4))
- {
- //on ne passe au suivant que sur le textBox n'est pas vide
- if(((TextBox)sender).Text.Length > 0 )
- this.SelectNextControl((TextBox)sender,true,false,false,true);
- e.Handled = true;
- }
- // si on demande le numéro du port avec la touche :
- else if(e.KeyChar == ':' && ((TextBox)sender).Equals(textBox4))
- {
- this.SelectNextControl((TextBox)sender,true,false,false,true);
- e.Handled = true;
- }
- // Et sinon, on gère toutes les autres touches tapées, et on en fait rien
- else e.Handled = true;
- }
-
- /// <summary>
- /// Fonction appelée lorsque la valeur du textBox sender est modifiée.
- /// Elle est donc appelé généralement après un textBoxKeyPress.
- /// Elle ne teste que la longueur du texte, supposant sa valeur correcte.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void IPTextBoxTextChanged(object sender, System.EventArgs e)
- {
- // si le textBox n'est pas vide et est un nombre
- if(((TextBox)sender).Text.Length != 0 && IsNumeric(((TextBox)sender).Text))
- {
- //on supprime les zéros inutiles en début de nombre
- String txt = ((TextBox)sender).Text;
- ((TextBox)sender).Text = Convert.ToInt32(txt).ToString();
- txt = ((TextBox)sender).Text;
- //on se place à la fin de la saisie
- ((TextBox)sender).Select(txt.Length,0);
- //si on a 3 chiffres, on passe au controle suivant
- if(((TextBox)sender).Text.Length == 3)
- this.SelectNextControl((TextBox)sender,true,false,false,true);
- if(((TextBox)sender).Text.Length > 3)
- ((TextBox)sender).Text = ((TextBox)sender).Text.Remove(5,((TextBox)sender).Text.Length-3);
- }
- else
- {
- ((TextBox)sender).Focus();
- ((TextBox)sender).Select(0,((TextBox)sender).Text.Length);
- }
- }
-
- /// <summary>
- /// Fonction permettant de connaitre l'IP au format String
- /// </summary>
- /// <returns>IP entrée au format String</returns>
- public string getIPInString()
- {
- if(textBox1.Text.Length !=0 &&
- textBox2.Text.Length !=0 &&
- textBox3.Text.Length !=0 &&
- textBox4.Text.Length !=0)
- {
- return textBox1.Text + "." + textBox2.Text + "." + textBox3.Text + "." + textBox4.Text;
- }
- else throw new Exception(string.Format("Au moins une des valeurs de l'IP est vide."));
- }
//Voici certaines fonctions utilisées pour controlé la validité de l'adresse
//ainsi que la fonction et variable pour récupérer et assigné la valeur.
/// <summary>
/// Variable permettant de définir ou de récupérer l'adresse
/// IP du composant au format String
/// </summary>
public String stringIP
{
set
{
try
{
String[] txtIp = value.Split(new char[1]{'.'});
textBox1.Text = txtIp[0];
textBox2.Text = txtIp[1];
textBox3.Text = txtIp[2];
textBox4.Text = txtIp[3];
}
catch
{
throw new Exception(string.Format("La valeur donnée n'est pas valide."));
}
}
get
{
return getIPInString();
}
}
/// <summary>
/// Cette fonction teste si il la valeur du texBox sender
/// est correcte.
/// Si oui, on laisse changer de controle.
/// Sinon, on reste sur ce controle et on selectionne le texte.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void IPTextBoxLeave(object sender, System.EventArgs e)
{
if(((TextBox)sender).Text == "") return;
if(!IsNumeric(((TextBox)sender).Text))
{
((TextBox)sender).Focus();
((TextBox)sender).SelectAll();
return;
}
else
{
int value = Convert.ToInt32(((TextBox)sender).Text);
if((value<0) || (value>255))
{
((TextBox)sender).Focus();
((TextBox)sender).Select(0,((TextBox)sender).Text.Length);
return;
}
}
}
/// <summary>
/// Fonction appelée à l'appuis d'une touche clavier.
/// Elle teste la validitée de cette dernière avant de l'inscrire.
/// Si elle est correcte, on laisse la touche s'exécuter.
/// Sinon, on l'inhibe.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBoxKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// Si la caractère tapé est numérique
if (char.IsNumber(e.KeyChar))
{
if (e.KeyChar == '²') e.Handled = true; // Si c'est un '²', on gère l'evenement.
else e.Handled = false; // Sinon, on laisse passer le caractère (On peut omettre cette ligne)
}
// Si le caractère tapé est un caractère de "controle" (Enter, backspace, ...), on laisse passer
else if (char.IsControl(e.KeyChar))
{
if(e.KeyChar == Convert.ToChar(8)&& ((TextBox)sender).Text.Length ==0 )
{
//si touche suppr et textbox vide,on passe au précédent
this.SelectNextControl((TextBox)sender,false,false,false,true);
}
e.Handled = false;
}
// Si on appuit sur '.', on passe à l'autre nombre de l'IP (sauf dernier nombre et le port )
else if (e.KeyChar == '.' && !((TextBox)sender).Equals(textBox5) && !((TextBox)sender).Equals(textBox4))
{
//on ne passe au suivant que sur le textBox n'est pas vide
if(((TextBox)sender).Text.Length > 0 )
this.SelectNextControl((TextBox)sender,true,false,false,true);
e.Handled = true;
}
// si on demande le numéro du port avec la touche :
else if(e.KeyChar == ':' && ((TextBox)sender).Equals(textBox4))
{
this.SelectNextControl((TextBox)sender,true,false,false,true);
e.Handled = true;
}
// Et sinon, on gère toutes les autres touches tapées, et on en fait rien
else e.Handled = true;
}
/// <summary>
/// Fonction appelée lorsque la valeur du textBox sender est modifiée.
/// Elle est donc appelé généralement après un textBoxKeyPress.
/// Elle ne teste que la longueur du texte, supposant sa valeur correcte.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void IPTextBoxTextChanged(object sender, System.EventArgs e)
{
// si le textBox n'est pas vide et est un nombre
if(((TextBox)sender).Text.Length != 0 && IsNumeric(((TextBox)sender).Text))
{
//on supprime les zéros inutiles en début de nombre
String txt = ((TextBox)sender).Text;
((TextBox)sender).Text = Convert.ToInt32(txt).ToString();
txt = ((TextBox)sender).Text;
//on se place à la fin de la saisie
((TextBox)sender).Select(txt.Length,0);
//si on a 3 chiffres, on passe au controle suivant
if(((TextBox)sender).Text.Length == 3)
this.SelectNextControl((TextBox)sender,true,false,false,true);
if(((TextBox)sender).Text.Length > 3)
((TextBox)sender).Text = ((TextBox)sender).Text.Remove(5,((TextBox)sender).Text.Length-3);
}
else
{
((TextBox)sender).Focus();
((TextBox)sender).Select(0,((TextBox)sender).Text.Length);
}
}
/// <summary>
/// Fonction permettant de connaitre l'IP au format String
/// </summary>
/// <returns>IP entrée au format String</returns>
public string getIPInString()
{
if(textBox1.Text.Length !=0 &&
textBox2.Text.Length !=0 &&
textBox3.Text.Length !=0 &&
textBox4.Text.Length !=0)
{
return textBox1.Text + "." + textBox2.Text + "." + textBox3.Text + "." + textBox4.Text;
}
else throw new Exception(string.Format("Au moins une des valeurs de l'IP est vide."));
}
Conclusion
Ce qu'il reste a faire: - supprimer les bugs que vous trouverez :) - redessiner les éléments du controle lorsqu'on redimentionne ce dernier (dans le rezize du controle)
Mise à jour: - dès qu'un bug sera signalé ou que j'aurai rencontré - tant que je programmerai
J'ai réalisé ce controle à partir de recherche sur le forum, je vous remercie donc.
Fichier Zip
Historique
- 26 avril 2006 17:05:53 :
- Il y a des erreurs avec le disigner à cause du controle d'exception que j'ai mis lorsqu'on place le composant sur une form.
Le designer essait de lire la valeur de l'Ip (alors qu'elle est vide) et celà génère une exeption.
Pour le moment, je n'ai enlevé que le controle d'exception du source pour que vous puissiez tester.
- 27 avril 2006 10:22:55 :
- J'ai enlever la gestion du port pour etre plus générique.
J'ai laissé dans les description du designer que le formatage en String de l'IP.
J'ai remis les exceptions lors de la saisie ou la récupération d'une adresse invalide. Pour celà, il a falu que je mette une IP par defaut (0.0.0.0), je n'ai pas encore bien réfléchie à ce problème.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Controle IP... [ par Miltiades ]
J'aimerai savoir s'il le controle "Adresse IP" qui avait été implémenté en MFC existe en C#(ce controle sert à afficher une adresse IP en séparant les
[C#] saisie d'adresse ip dans une textbox [ par karshnod ]
Bonjour, je suis confronté a un petit probleme : J'ai une TextBox, et je souhaiterais que l'on puisse saisir seulement l'adresse ip et rien d'autre (p
Adresse IP Valide? [ par Gefkuz ]
Bonjour,Je voulai savoir s'il existai une class permettant de verifier si une ip contenu dans une string etait valide. en renvoyant un bool ou un int?
Tester l'adresse IP [ par bshebert ]
J'utilise un pc sur 2 réseaux distincts (réseau A et réseau B) avec, donc, 2 adresses IP distincts. Par ex: Lorsque je suis sur le réseau A je souhait
Adresse IP [ par fdouieb ]
Bonjour, Je ne suis pas a mon aise en ce qui concerne les Adresse IP et le ports qui vont avec. Cependant, je sais qu'avec l'instruction "TcpListener
Modifier l'adresse IP [ par sebfr74 ]
Bonjour,Je suis en train d'écrire une application sous VS2005 pour windows CE 5.0 en C# avec le compact framework 2.J'ai supprimé le shell s
Récupérer l'adresse IP [ par thebigboss ]
Bonjour,je voudrais savoir comment faire pour récupérer son adresse IP et celle d'un message posté sur un port.Je m'explique, je suis a
Suppression adresse MAC [ par blg2 ]
Environnement :- je développe en VISUAL C++ 6.0 sur PC .- une des tâches du logiciel consiste à communiquer avec d'autres PC en utilisa
Afficher son adresse IP [ par piep14 ]
Bonsoir, je souhaite afficher l'adresse IP de l'ordinateur où est lancé l'application. Merci
C# Lister les adresse IP d'un port. [ par Wolf007 ]
Bonjour à tous.Je débute en programmation réseau et je cheche à savoir comment on peut récupérer toutes les adresse ip c
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|