<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Les forums de JeBulle.net – [Vb.Net][1.1] TextBox : format décimal, pavé numérique et virgule]]></title>
		<link>https://forums.jebulle.net/topic/536/vbnet11-textbox-format-decimal-pave-numerique-et-virgule/</link>
		<atom:link href="https://forums.jebulle.net/feed/rss/topic/536/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Messages les plus récents de [Vb.Net][1.1] TextBox : format décimal, pavé numérique et virgule.]]></description>
		<lastBuildDate>Fri, 16 Jun 2006 14:46:41 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: [Vb.Net][1.1] TextBox : format décimal, pavé numérique et virgule]]></title>
			<link>https://forums.jebulle.net/post/6357/#p6357</link>
			<description><![CDATA[<p>Bon aller, comme je suis un mec sympa <img src="https://forums.jebulle.net/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" />, je vous donne la solution que j&#039;ai finalement trouvée. C&#039;est du bourrinage, mais que voulez-vous, .net reste .net...</p><p>Jusque là, mon but était d&#039;interdire la saisie du &#039;.&#039;. Et bien pour finir, j&#039;ai autorisé sa saisie. Oui oui oui. Pour arriver à mes fins, j&#039;ai ajouté un tout petit traitement lors de l&#039;événement qui représente le relachement d&#039;une touche clavier. Ce petit traitement vérifie si un &#039;.&#039; se trouve dans le champ et le remplace alors par une virgule. Cela a nécessité une légère modif dans la fonction de filtrage et c&#039;est tout ! J&#039;ai [s]niqué[/s] contourné [s]Vb[/s] le problème !</p><p>Je mets les bouts de codes finaux qui permettent de faire le filtrage correctement ; on ne sait jamais, ca pourra sûrement [s]me reservir[/s] servir à d&#039;autres <img src="https://forums.jebulle.net/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /> !</p><div class="codebox"><pre><code>Private Const K_FILTRE_DOUBLE As String = &quot;1234567890,.&quot;


&#039; L&#039;événement exécuté sur les frappes claviers dans mon champ
Private Sub txtDimLong_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDimLong.KeyPress
    filtrerFrappe(sender, e, K_FILTRE_DOUBLE)
End Sub


&#039; Relâchement de la touche clavier
Private Sub txtDimLong_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtDimLong.KeyUp
    &#039; On remplace tout &quot;.&quot; éventuel qui viendrait malheureusement se glisser dans le champ par une &quot;,&quot;
    CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(&quot;.&quot;, &quot;,&quot;)

    &#039; On replace le curseur en fin de saisie, sinon il reste devant la virgule fraichement remplaçée
    CType(sender, TextBox).SelectionStart = CType(sender, TextBox).Text.Length
End Sub


&#039;
&#039; Filtre la frappe dans un champ selon les éléments autorisés.
&#039;
&#039; @param    [TextBox]                txtCourant    Champ concerné par le filtrage.
&#039; @param    [KeyPressEventArgs]        e            L&#039;objet qui permet de contrôler la frappe clavier.
&#039; @param    [String]                sFiltre        Chaîne qui contient la liste des caractères autorisés.
&#039; @return    [Boolean]                            True si caractère autorisé, False sinon.
&#039;
Private Sub filtrerFrappe(ByRef txtCourant As TextBox, ByRef e As System.Windows.Forms.KeyPressEventArgs, ByVal sFiltre As String)
    Dim bFiltrer As Boolean = False
    Dim cFrappe As String = e.KeyChar

    &#039; L&#039;astuce !
    If cFrappe = &quot;.&quot; Then cFrappe = &quot;,&quot;

    &#039; Vérification que le caractère saisi est autorisé
    bFiltrer = (sFiltre.IndexOf(cFrappe) = -1)

    &#039; On vérifie que le caractère &quot;,&quot; n&#039;a été saisi qu&#039;une seule fois et pas en début de frappe
    If cFrappe = &quot;,&quot; Then
        If txtCourant.Text.IndexOf(cFrappe) &lt;&gt; -1 Then
            bFiltrer = True
        Else
            bFiltrer = (txtCourant.Text.Length = 0)
        End If
    End If

    &#039; Touche backspace autorisée
    If cFrappe = ControlChars.Back Then bFiltrer = False

    &#039; Autorisation ou interdiction de la frappe
    e.Handled = bFiltrer
End Sub</code></pre></div><p>Voilà voila !</p><p>Bien évidemment, si quelqu&#039;un à une autre solution, qu&#039;il n&#039;hésite pas à me faire passer pour un débile <img src="https://forums.jebulle.net/img/smilies/wink.png" width="15" height="15" alt="wink" />.</p>]]></description>
			<author><![CDATA[null@example.com (SamRay1024)]]></author>
			<pubDate>Fri, 16 Jun 2006 14:46:41 +0000</pubDate>
			<guid>https://forums.jebulle.net/post/6357/#p6357</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Vb.Net][1.1] TextBox : format décimal, pavé numérique et virgule]]></title>
			<link>https://forums.jebulle.net/post/6356/#p6356</link>
			<description><![CDATA[<p>Je crois que la gestion des paramètres régionaux va te poursuivre encore un petit bout de temps <img src="https://forums.jebulle.net/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[null@example.com (Cyberbob002)]]></author>
			<pubDate>Fri, 16 Jun 2006 14:08:52 +0000</pubDate>
			<guid>https://forums.jebulle.net/post/6356/#p6356</guid>
		</item>
		<item>
			<title><![CDATA[[Vb.Net][1.1] TextBox : format décimal, pavé numérique et virgule]]></title>
			<link>https://forums.jebulle.net/post/6355/#p6355</link>
			<description><![CDATA[<p>Bonjour,</p><p>Me revoici avec mon ami Vb.Net :siffle:</p><p>Je souhaite mettre en place un <strong>filtrage</strong> sur un <strong>textBox</strong> pour ne saisir que des <strong>valeurs décimales</strong>.</p><p>Visiblement, on ne peut pas définir un format qui permettrait de faire ça simplement. Donc j&#039;ai codé une &#039;tite méthode pour faire mon filtrage. Elle fonctionne...à ceci près qu&#039;il reste un problème avec la touche &#039;.&#039; du pavé numérique <img src="https://forums.jebulle.net/img/smilies/mad.png" width="15" height="15" alt="mad" /> qui est en étroite relation avec les paramètres régionaux de la machine...toujours le même problème.</p><p>Le problème est le suivant : impossible d&#039;obtenir la <strong>virgule</strong> depuis le pavé numérique (j&#039;ai vérifié, je suis bien en format &#039;,&#039; pour le séparateur décimal sur ma machine).</p><p>Pour voir, j&#039;ai fait un test : nouveau projet, nouvelle fenêtre, un unique textBox dans la fenêtre, compilation, [s]bourrinnage[/s] essai dans le champ de la touche point du pavé numérique : résultat, le &#039;.&#039; s&#039;affiche et non la &#039;,&#039;. Génial...</p><p>Donc si jamais quelqu&#039;un à une solution, je suis preneur <img src="https://forums.jebulle.net/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /> !</p><p>Pour info, voici ma gestion de filtrage :</p><div class="codebox"><pre><code>Private Const K_FILTRE_DOUBLE As String = &quot;1234567890,&quot;


&#039; L&#039;événement exécuter sur les frappes claviers dans mon champ
Private Sub txtDimLong_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDimLong.KeyPress
    filtrerFrappe(sender, e, K_FILTRE_DOUBLE)
End Sub


&#039;
&#039; Filtre la frappe dans un champ selon les éléments autorisés.
&#039;
&#039; @param    [TextBox]                txtCourant    Champ concerné par le filtrage.
&#039; @param    [KeyPressEventArgs]        e            L&#039;objet qui permet de contrôler la frappe clavier.
&#039; @param    [String]                sFiltre        Chaîne qui contient la liste des caractères autorisés.
&#039; @return    [Boolean]                            True si caractère autorisé, False sinon.
&#039;
Private Sub filtrerFrappe(ByRef txtCourant As TextBox, ByRef e As System.Windows.Forms.KeyPressEventArgs, ByVal sFiltre As String)
    Dim bFiltrer As Boolean = False
    Dim cFrappe As String = e.KeyChar

    &#039; Vérification que le caractère saisi est autorisé
    bFiltrer = (sFiltre.IndexOf(cFrappe) = -1)

    &#039; On vérifie que le caractère &quot;,&quot; n&#039;a été saisi qu&#039;une seule fois et pas en début de frappe
    If cFrappe = &quot;,&quot; Then
        If txtCourant.Text.IndexOf(cFrappe) &lt;&gt; -1 Then
            bFiltrer = True
        Else
            bFiltrer = (txtCourant.Text.Length = 0)
        End If
    End If

    &#039; Touche backspace autorisée
    If cFrappe = ControlChars.Back Then bFiltrer = False

    &#039; Autorisation ou interdiction de la frappe
    e.Handled = bFiltrer
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (SamRay1024)]]></author>
			<pubDate>Wed, 14 Jun 2006 15:47:23 +0000</pubDate>
			<guid>https://forums.jebulle.net/post/6355/#p6355</guid>
		</item>
	</channel>
</rss>
