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
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|