Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie les
séparateurs décimaux (par ex. remplacer systématiquement le point et la
virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à propos
du séparateur (nb : les utilisateurs se servent du pavé numérique pour la
saisie, et par défaut c'est la virgule qui est paramétrée en séparateur
décimal => problème évident car ils utilisent le point du pavé numérique
en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie les
séparateurs décimaux (par ex. remplacer systématiquement le point et la
virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à propos
du séparateur (nb : les utilisateurs se servent du pavé numérique pour la
saisie, et par défaut c'est la virgule qui est paramétrée en séparateur
décimal => problème évident car ils utilisent le point du pavé numérique
en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie les
séparateurs décimaux (par ex. remplacer systématiquement le point et la
virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à propos
du séparateur (nb : les utilisateurs se servent du pavé numérique pour la
saisie, et par défaut c'est la virgule qui est paramétrée en séparateur
décimal => problème évident car ils utilisent le point du pavé numérique
en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace with
the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie les
séparateurs décimaux (par ex. remplacer systématiquement le point et la
virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à propos
du séparateur (nb : les utilisateurs se servent du pavé numérique pour la
saisie, et par défaut c'est la virgule qui est paramétrée en séparateur
décimal => problème évident car ils utilisent le point du pavé numérique
en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace with
the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" <___cgirard@cer-ca.fr> a écrit dans le message de news:
e4huFFR5FHA.3760@TK2MSFTNGP14.phx.gbl...
Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie les
séparateurs décimaux (par ex. remplacer systématiquement le point et la
virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à propos
du séparateur (nb : les utilisateurs se servent du pavé numérique pour la
saisie, et par défaut c'est la virgule qui est paramétrée en séparateur
décimal => problème évident car ils utilisent le point du pavé numérique
en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace with
the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie les
séparateurs décimaux (par ex. remplacer systématiquement le point et la
virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à propos
du séparateur (nb : les utilisateurs se servent du pavé numérique pour la
saisie, et par défaut c'est la virgule qui est paramétrée en séparateur
décimal => problème évident car ils utilisent le point du pavé numérique
en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace with
the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie
les séparateurs décimaux (par ex. remplacer systématiquement le point et
la virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à
propos du séparateur (nb : les utilisateurs se servent du pavé numérique
pour la saisie, et par défaut c'est la virgule qui est paramétrée en
séparateur décimal => problème évident car ils utilisent le point du pavé
numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace with
the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" <___cgirard@cer-ca.fr> a écrit dans le message de news:
e4huFFR5FHA.3760@TK2MSFTNGP14.phx.gbl...
Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie
les séparateurs décimaux (par ex. remplacer systématiquement le point et
la virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à
propos du séparateur (nb : les utilisateurs se servent du pavé numérique
pour la saisie, et par défaut c'est la virgule qui est paramétrée en
séparateur décimal => problème évident car ils utilisent le point du pavé
numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace with
the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie
les séparateurs décimaux (par ex. remplacer systématiquement le point et
la virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à
propos du séparateur (nb : les utilisateurs se servent du pavé numérique
pour la saisie, et par défaut c'est la virgule qui est paramétrée en
séparateur décimal => problème évident car ils utilisent le point du pavé
numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Le hic c'est que la propriété e.Keychar est en lecture seule (dans VS.Net
2003 en tout cas !) ; c'est justement ce que j'aimerais faire ;-)
Le hic c'est que la propriété e.Keychar est en lecture seule (dans VS.Net
2003 en tout cas !) ; c'est justement ce que j'aimerais faire ;-)
Le hic c'est que la propriété e.Keychar est en lecture seule (dans VS.Net
2003 en tout cas !) ; c'est justement ce que j'aimerais faire ;-)
en 2005, c'est get / set.Le hic c'est que la propriété e.Keychar est en lecture seule (dans VS.Net
2003 en tout cas !) ; c'est justement ce que j'aimerais faire ;-)
en 2005, c'est get / set.
Le hic c'est que la propriété e.Keychar est en lecture seule (dans VS.Net
2003 en tout cas !) ; c'est justement ce que j'aimerais faire ;-)
en 2005, c'est get / set.Le hic c'est que la propriété e.Keychar est en lecture seule (dans VS.Net
2003 en tout cas !) ; c'est justement ce que j'aimerais faire ;-)
Bonjour,
Je suis interessé par la réponse car j'ai moi aussi le même problème.
Il y a une chose qui me gène dans le code de la solution que vous
proposez, c'est que e.KeyChar est en lecture seule.
Etes-vous sûr de l'avoir bien testé?
Olivier
Thierry HUGUET [MS] a écrit :J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace
with the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie
les séparateurs décimaux (par ex. remplacer systématiquement le point et
la virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à
propos du séparateur (nb : les utilisateurs se servent du pavé numérique
pour la saisie, et par défaut c'est la virgule qui est paramétrée en
séparateur décimal => problème évident car ils utilisent le point du pavé
numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour,
Je suis interessé par la réponse car j'ai moi aussi le même problème.
Il y a une chose qui me gène dans le code de la solution que vous
proposez, c'est que e.KeyChar est en lecture seule.
Etes-vous sûr de l'avoir bien testé?
Olivier
Thierry HUGUET [MS] a écrit :
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace
with the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" <___cgirard@cer-ca.fr> a écrit dans le message de news:
e4huFFR5FHA.3760@TK2MSFTNGP14.phx.gbl...
Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie
les séparateurs décimaux (par ex. remplacer systématiquement le point et
la virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à
propos du séparateur (nb : les utilisateurs se servent du pavé numérique
pour la saisie, et par défaut c'est la virgule qui est paramétrée en
séparateur décimal => problème évident car ils utilisent le point du pavé
numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour,
Je suis interessé par la réponse car j'ai moi aussi le même problème.
Il y a une chose qui me gène dans le code de la solution que vous
proposez, c'est que e.KeyChar est en lecture seule.
Etes-vous sûr de l'avoir bien testé?
Olivier
Thierry HUGUET [MS] a écrit :J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un control
textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code from
keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace
with the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une DataGrid,
pouvoir modifier à la volée dans l'événement KeyPress le caractère envoyé
par l'utilisateur, le but étant de gérer directement lors de la saisie
les séparateurs décimaux (par ex. remplacer systématiquement le point et
la virgule par le séparateur décimal en vigueur dans les paramètres
régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur de
KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet puisqu'il
n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement KeyPress
est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not _NoKeyPress
Then
'On force la "saisie" du bon séparateur décimal pour
les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de cellule
car comme la grille est "bindée" j'ai systématiquement un message à
propos du séparateur (nb : les utilisateurs se servent du pavé numérique
pour la saisie, et par défaut c'est la virgule qui est paramétrée en
séparateur décimal => problème évident car ils utilisent le point du pavé
numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour,
Je suis interessé par la réponse car j'ai moi aussi le même problème.
Il y a une chose qui me gène dans le code de la solution que vous
proposez, c'est que e.KeyChar est en lecture seule.
Etes-vous sûr de l'avoir bien testé?
Olivier
Thierry HUGUET [MS] a écrit :J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un
control textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code
from keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace
with the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de
news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une
DataGrid, pouvoir modifier à la volée dans l'événement KeyPress le
caractère envoyé par l'utilisateur, le but étant de gérer directement
lors de la saisie les séparateurs décimaux (par ex. remplacer
systématiquement le point et la virgule par le séparateur décimal en
vigueur dans les paramètres régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur
de KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet
puisqu'il n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement
KeyPress est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not
_NoKeyPress Then
'On force la "saisie" du bon séparateur décimal
pour les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de
cellule car comme la grille est "bindée" j'ai systématiquement un
message à propos du séparateur (nb : les utilisateurs se servent du
pavé numérique pour la saisie, et par défaut c'est la virgule qui est
paramétrée en séparateur décimal => problème évident car ils
utilisent le point du pavé numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour,
Je suis interessé par la réponse car j'ai moi aussi le même problème.
Il y a une chose qui me gène dans le code de la solution que vous
proposez, c'est que e.KeyChar est en lecture seule.
Etes-vous sûr de l'avoir bien testé?
Olivier
Thierry HUGUET [MS] a écrit :
J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un
control textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code
from keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace
with the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" <___cgirard@cer-ca.fr> a écrit dans le message de
news: e4huFFR5FHA.3760@TK2MSFTNGP14.phx.gbl...
Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une
DataGrid, pouvoir modifier à la volée dans l'événement KeyPress le
caractère envoyé par l'utilisateur, le but étant de gérer directement
lors de la saisie les séparateurs décimaux (par ex. remplacer
systématiquement le point et la virgule par le séparateur décimal en
vigueur dans les paramètres régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur
de KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet
puisqu'il n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement
KeyPress est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not
_NoKeyPress Then
'On force la "saisie" du bon séparateur décimal
pour les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de
cellule car comme la grille est "bindée" j'ai systématiquement un
message à propos du séparateur (nb : les utilisateurs se servent du
pavé numérique pour la saisie, et par défaut c'est la virgule qui est
paramétrée en séparateur décimal => problème évident car ils
utilisent le point du pavé numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Bonjour,
Je suis interessé par la réponse car j'ai moi aussi le même problème.
Il y a une chose qui me gène dans le code de la solution que vous
proposez, c'est que e.KeyChar est en lecture seule.
Etes-vous sûr de l'avoir bien testé?
Olivier
Thierry HUGUET [MS] a écrit :J'ai le code suivant (VB 2005) mais que je n'ai testé qu'avec un
control textbox. Mais je pense que le principe est le même.
Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
' The Windows message value VK_DECIMAL is defined in Winuser.h.
Dim VK_DECIMAL As Integer = &H6E 'Decimal Separator key code
from keyboard numpad
If e.KeyCode = VK_DECIMAL Then VK_DECIMAL_pressed = True
End Sub
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If VK_DECIMAL_pressed = True Then
e.KeyChar =
My.Application.Culture.NumberFormat.CurrencyDecimalSeparator 'replace
with the System Decimal Separator character
e.Handled = False
VK_DECIMAL_pressed = False
End If
End Sub
Il faut bien entedu définir la variable VK_DECIMAL_pressed comme suit:
Public VK_DECIMAL_pressed As Boolean = False
Thierry HUGUET
Microsoft
"Cédric Girard" a écrit dans le message de
news:Bonjour
Je souhaite dans le cadre d'une gestion de la saisie dans une
DataGrid, pouvoir modifier à la volée dans l'événement KeyPress le
caractère envoyé par l'utilisateur, le but étant de gérer directement
lors de la saisie les séparateurs décimaux (par ex. remplacer
systématiquement le point et la virgule par le séparateur décimal en
vigueur dans les paramètres régionaux)
Si cela était très simple en VB6 (il suffisait de remplacer la valeur
de KeyAscii dans l'événement KeyPress) ça l'est moins en DotNet
puisqu'il n'existe pas de propriétés dans les EventArgs permettant cela.
J'ai tenté d'utiliser SendKeys pour "simuler" la saisie mais pour une
raison que j'ignore, ça "bloque" en saisie. Voici le code que j'avais
essayé d'utiliser.
================================================================== >>>
Private _NoKeyPress As Boolean = False 'Si VRAI l'événement
KeyPress est sans action
[...]
Private Sub dbgrdTrav_KeyPress(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.KeyPressEventArgs) Handles dbgrdTrav.KeyPress
'Filtrage de la saisie
Select Case dbgrdTrav.Col
[...]
Case 11, 12
'Saisies des frais annexes et de restaurants (montants
monétaires)
If e.KeyChar <> "." And e.KeyChar <> "," And Not
Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
'Annulation de la saisie
e.Handled = True
End If
If e.KeyChar = "." Or e.KeyChar = "," And Not
_NoKeyPress Then
'On force la "saisie" du bon séparateur décimal
pour les formats monétaires
e.Handled = True
_NoKeyPress = True
SendKeys.Send(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)
_NoKeyPress = False
End If
[...]
End Select
================================================================== >>>
Auriez-vous une solution à mon problème ?
Je ne peux (et ne veux) pas corriger le séparateur en sortie de
cellule car comme la grille est "bindée" j'ai systématiquement un
message à propos du séparateur (nb : les utilisateurs se servent du
pavé numérique pour la saisie, et par défaut c'est la virgule qui est
paramétrée en séparateur décimal => problème évident car ils
utilisent le point du pavé numérique en saisie !)
Merci :-)
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.aube-nature.com
Y'a pas moyen en DotNet 2003 (je précise cette fois !) d'intercepter et de
remplacer une touche ou un caractère ??? C'est dingue ça !
Y'a pas moyen en DotNet 2003 (je précise cette fois !) d'intercepter et de
remplacer une touche ou un caractère ??? C'est dingue ça !
Y'a pas moyen en DotNet 2003 (je précise cette fois !) d'intercepter et de
remplacer une touche ou un caractère ??? C'est dingue ça !
Y'a pas moyen en DotNet 2003 (je précise cette fois !) d'intercepter et de
remplacer une touche ou un caractère ??? C'est dingue ça !
Y'a pas moyen en DotNet 2003 (je précise cette fois !) d'intercepter et de
remplacer une touche ou un caractère ??? C'est dingue ça !
Y'a pas moyen en DotNet 2003 (je précise cette fois !) d'intercepter et de
remplacer une touche ou un caractère ??? C'est dingue ça !