FONCTION POUR METTRE UN COMBOBOX EN READONLY SANS METTRE EXPLICITEMENT ENABLED À
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
8 avril 2006 à 10:12
bensehila81
Messages postés1Date d'inscriptionjeudi 11 mars 2010StatutMembreDernière intervention31 octobre 2010
-
31 oct. 2010 à 16:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
bensehila81
Messages postés1Date d'inscriptionjeudi 11 mars 2010StatutMembreDernière intervention31 octobre 2010 31 oct. 2010 à 16:23
svp
mes amis je cherche coment fair
quant je click sur dbcombobox la valeur de dbedit change par exemple si dbcombobox=ing alorsdbedit=12
le test avec case
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 sept. 2010 à 14:29
ok ok.
cs_sebeto
Messages postés7Date d'inscriptiondimanche 11 mars 2007StatutMembreDernière intervention29 septembre 2010 28 sept. 2010 à 13:26
Désolé pour la faute, "la ComboBox apparaît grisée"
cs_sebeto
Messages postés7Date d'inscriptiondimanche 11 mars 2007StatutMembreDernière intervention29 septembre 2010 28 sept. 2010 à 13:25
Tout simplement parce que si tu le mets en Enabled=false, la ComboBox apparaît grisé, mais surtout le texte n'apparaît pas en noir comme dans un textbox grisé, mais en gris également, ce qui nuit grandement à la lisibilité. C'est ce qui était demandé dans la source originale : "Donc la combobox est inactive, mais son contenue n'est pas 'flouté', comme avec la propriété Enabled"
La technique présentée permet de garder un texte noir sur fond blanc sans s'embêter.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 sept. 2010 à 11:31
pourquoi ne pas le mettre en Enabled = False, en ce cas ?
je ne comprends pas.
cs_sebeto
Messages postés7Date d'inscriptiondimanche 11 mars 2007StatutMembreDernière intervention29 septembre 2010 28 sept. 2010 à 11:27
Solution encore plus simple: donner automatiquement le focus à un autre element lors de l'évènement "enter".
Exemple : si mon ComboBox à mettre en lecture seule s'appelle CbReadOnly et que j'en ai un autre nommé CbAutre, pour mettre CbReadOnly en lecture seule j'ai juste à mettre :
Private Sub CbReadOnly _Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles CbReadOnly.Enter
CbAutre.Focus()
End Sub
> Renfield : le comportement cherché ici est de mettre la CB en ReadOnly dans le sens ou sa valeur ne peut être changée. combobox.DropDownStyle=ComboBoxStyle.DropDownList limite les choix aux éléments de la ComboBox, mais n'empêche pas de changer la valeur à une autre valeur de la liste...
zigolupo
Messages postés1Date d'inscriptiondimanche 14 janvier 2007StatutMembreDernière intervention 5 septembre 2008 5 sept. 2008 à 14:41
Petite piste de solution pour ne pas passer par une surcharge ou dll...
Private Sub combobox_verrou_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If (TypeOf (sender) Is ComboBox) Then
If sender.DropDownStyle = ComboBoxStyle.Simple Then
e.Handled = True
End If
End If
End Sub
Private Sub combobox_verrou_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If (TypeOf (sender) Is ComboBox) Then
If sender.DropDownStyle = ComboBoxStyle.Simple Then
e.Handled = True
End If
End If
End Sub
Public Sub activer(ByRef mabox As Object, ByVal verrou As Boolean)
If (TypeOf (mabox ) Is ComboBox)
With DirectCast(mabox , ComboBox)
.BackColor = lColCouleurFond
.ForeColor = System.Drawing.Color.Black
If pBlnOui Then
.DropDownStyle = ComboBoxStyle.Simple
.TabStop = False
AddHandler .KeyDown, AddressOf combobox_verrou_KeyDown
AddHandler .KeyPress, AddressOf combobox_verrou_KeyPress
.ContextMenu = New ContextMenu() 'empeche un coller sur clic droit
Else
RemoveHandler .KeyDown, AddressOf combobox_verrou_KeyDown
RemoveHandler .KeyPress, AddressOf combobox_verrou_KeyPress
.DropDownStyle = ComboBoxStyle.DropDownList
.TabStop = True
End If
End With
end if
End Sub
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 nov. 2007 à 06:32
Merci !
c'est ce que je m'evertue a dire depuis le départ.
Content que d'autres partagent mon point de vue
cs_imadev
Messages postés1Date d'inscriptionlundi 22 octobre 2007StatutMembreDernière intervention 7 novembre 2007 7 nov. 2007 à 02:05
c trés simple j'ai essayer
il faut just modifier la propiété combobox.DropDownStyle=ComboBoxStyle.DropDownList.
chris_brabant
Messages postés64Date d'inscriptiondimanche 24 juillet 2005StatutMembreDernière intervention29 septembre 2014 6 nov. 2007 à 09:15
normalement oui, je vais essayer de reproduire votre problème.
waspy59
Messages postés189Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention15 mai 2013 5 nov. 2007 à 18:50
j'ai testé car très intéressé par cette propriété... mais ca marche pas chez moi
Throw New Exception("SetComboReadOnly : erreur API Windows 'FindWindowEx'.")
J'ai l'erreur "SetComboReadOnly : erreur API Windows 'FindWindowEx'." sur cette ligne.
Comme met on en pratique cette fonction? si je veux l'appeler pour la combobox1 par exemple je dois ecrire:
SetComboReadOnly(ComboBox1, true) ???
merci de m'eclairer
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 16 mai 2007 à 10:46
le e contient les parametres passé à l'evenement KeyPress.
sa propriété Handled indique si l'evennement a été géré....
cs_comme
Messages postés122Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention18 juillet 2009 16 mai 2007 à 10:35
Pour Nerix27
Vous avez raison , on veut savoir comment activer ou desactiver un menu contextuel pour un controle
merci
cs_comme
Messages postés122Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention18 juillet 2009 16 mai 2007 à 10:32
Pour KYFRAN6
Le e du e.handled represente t-i-il le combobox ou autre chose? de toute façon ça ou ça cette instruction renvoie une erreur.
kyfran6
Messages postés1Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention15 mai 2007 15 mai 2007 à 11:57
voici une autre solution:
dans l'evenement KeyPress du combobox, inserrez le code suivant: e.Handled = True .
nerix27
Messages postés86Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention21 juin 20072 9 nov. 2006 à 18:07
N'oubliez pas de désactiver le menu contextuel sur le combobox afin de ne plus pouvoir couper ou coller quelque chose... ;-)
cs_comme
Messages postés122Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention18 juillet 2009 2 juin 2006 à 23:20
Bonsoir
(je dis bien keyascii=0 et non keyacii=0)
que ce soit un textbox ou un combobox
La ligne : keyascii=0 dans l'evenement Keypress du controle rend le controle inaccessible par le clavier.Don veroillé contre la saisie.
bonne chance
cs_comme
Messages postés122Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention18 juillet 2009 2 juin 2006 à 23:18
Bonsoir
que ce soit un textbox ou un combobox
La ligne : keyacii=0 dans l'evenement Keypress du controle rend le controle inaccessible par le clavier.Don veroillé contre la saisie.
bonne chance
cs_merci1
Messages postés1Date d'inscriptiondimanche 16 mai 2004StatutMembreDernière intervention 2 juin 2006 2 juin 2006 à 19:44
cs_comme
Messages postés122Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention18 juillet 2009 19 avril 2006 à 02:38
bonsoir
"le clic sur le List ne modifie pas le SelectedItem" c'est ce que vous dites,mais le click sur la petite flèche du combobox fait derouler la liste,si le but de votre fonction est la lecture seule du combobox il vaut mieux faire le plus simple( avec keyascii=0 dans l'evenement keypress du combobox ,ce dernier ne reçoit pas les events du clavier).S'il ya quelque chose de mystère dans la fonction ci-dessus autre que la lecture seule du combobox et que je ne suis pas arrivé à comprendre veuillez m'eclaircire plus le but de ces 28 lignes.
Amicalement/A bientôt
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 18 avril 2006 à 08:17
Pas bon Comme....
outre le fait que ton astuce, un peu tirée par les cheveux reviens a mettre le controle en mode DropDownList (ma suggestion)...
l'idée, là, c'est que le clic sur le List ne modifie pas le SelectedItem
cs_comme
Messages postés122Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention18 juillet 2009 17 avril 2006 à 00:12
Je vois que rendre un combobox en lecture seule est plus simple que ça:
voilà dans l'evenement (Keypress) du combobox tu ajoute la phrase : Keyascii=0 et comme ça ton combobox ne reçoit aucune ecriture.
chris_brabant
Messages postés64Date d'inscriptiondimanche 24 juillet 2005StatutMembreDernière intervention29 septembre 2014 10 avril 2006 à 21:28
pas du tout !
ca rend le champ de saisie ET la liste déroulante inactifs, mais sans que la comboBox prenne l'aspect "flouté", comme quand on met Enabled à True.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 8 avril 2006 à 10:15
si j'ai bien saisi...
ca fait que l'on ne peux pas saisir de texte dans la zone 'edit' du combobox,
et que l'on est obligé de cliquer sur les differents items...
finallement, comme si on changeais simplement les propriétés du ComboBox, pour le mettre en DropDownList.....
31 oct. 2010 à 16:23
mes amis je cherche coment fair
quant je click sur dbcombobox la valeur de dbedit change par exemple si dbcombobox=ing alorsdbedit=12
le test avec case
28 sept. 2010 à 14:29
28 sept. 2010 à 13:26
28 sept. 2010 à 13:25
La technique présentée permet de garder un texte noir sur fond blanc sans s'embêter.
28 sept. 2010 à 11:31
je ne comprends pas.
28 sept. 2010 à 11:27
Exemple : si mon ComboBox à mettre en lecture seule s'appelle CbReadOnly et que j'en ai un autre nommé CbAutre, pour mettre CbReadOnly en lecture seule j'ai juste à mettre :
Private Sub CbReadOnly _Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles CbReadOnly.Enter
CbAutre.Focus()
End Sub
> Renfield : le comportement cherché ici est de mettre la CB en ReadOnly dans le sens ou sa valeur ne peut être changée. combobox.DropDownStyle=ComboBoxStyle.DropDownList limite les choix aux éléments de la ComboBox, mais n'empêche pas de changer la valeur à une autre valeur de la liste...
5 sept. 2008 à 14:41
Private Sub combobox_verrou_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If (TypeOf (sender) Is ComboBox) Then
If sender.DropDownStyle = ComboBoxStyle.Simple Then
e.Handled = True
End If
End If
End Sub
Private Sub combobox_verrou_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If (TypeOf (sender) Is ComboBox) Then
If sender.DropDownStyle = ComboBoxStyle.Simple Then
e.Handled = True
End If
End If
End Sub
Public Sub activer(ByRef mabox As Object, ByVal verrou As Boolean)
If (TypeOf (mabox ) Is ComboBox)
With DirectCast(mabox , ComboBox)
.BackColor = lColCouleurFond
.ForeColor = System.Drawing.Color.Black
If pBlnOui Then
.DropDownStyle = ComboBoxStyle.Simple
.TabStop = False
AddHandler .KeyDown, AddressOf combobox_verrou_KeyDown
AddHandler .KeyPress, AddressOf combobox_verrou_KeyPress
.ContextMenu = New ContextMenu() 'empeche un coller sur clic droit
Else
RemoveHandler .KeyDown, AddressOf combobox_verrou_KeyDown
RemoveHandler .KeyPress, AddressOf combobox_verrou_KeyPress
.DropDownStyle = ComboBoxStyle.DropDownList
.TabStop = True
End If
End With
end if
End Sub
7 nov. 2007 à 06:32
c'est ce que je m'evertue a dire depuis le départ.
Content que d'autres partagent mon point de vue
7 nov. 2007 à 02:05
il faut just modifier la propiété combobox.DropDownStyle=ComboBoxStyle.DropDownList.
6 nov. 2007 à 09:15
5 nov. 2007 à 18:50
Throw New Exception("SetComboReadOnly : erreur API Windows 'FindWindowEx'.")
J'ai l'erreur "SetComboReadOnly : erreur API Windows 'FindWindowEx'." sur cette ligne.
Comme met on en pratique cette fonction? si je veux l'appeler pour la combobox1 par exemple je dois ecrire:
SetComboReadOnly(ComboBox1, true) ???
merci de m'eclairer
16 mai 2007 à 10:46
sa propriété Handled indique si l'evennement a été géré....
16 mai 2007 à 10:35
Vous avez raison , on veut savoir comment activer ou desactiver un menu contextuel pour un controle
merci
16 mai 2007 à 10:32
Le e du e.handled represente t-i-il le combobox ou autre chose? de toute façon ça ou ça cette instruction renvoie une erreur.
15 mai 2007 à 11:57
dans l'evenement KeyPress du combobox, inserrez le code suivant: e.Handled = True .
9 nov. 2006 à 18:07
2 juin 2006 à 23:20
(je dis bien keyascii=0 et non keyacii=0)
que ce soit un textbox ou un combobox
La ligne : keyascii=0 dans l'evenement Keypress du controle rend le controle inaccessible par le clavier.Don veroillé contre la saisie.
bonne chance
2 juin 2006 à 23:18
que ce soit un textbox ou un combobox
La ligne : keyacii=0 dans l'evenement Keypress du controle rend le controle inaccessible par le clavier.Don veroillé contre la saisie.
bonne chance
2 juin 2006 à 19:44
S.V.P. comment peut-on utiliser keyacii=0?
Merci.
19 avril 2006 à 02:38
"le clic sur le List ne modifie pas le SelectedItem" c'est ce que vous dites,mais le click sur la petite flèche du combobox fait derouler la liste,si le but de votre fonction est la lecture seule du combobox il vaut mieux faire le plus simple( avec keyascii=0 dans l'evenement keypress du combobox ,ce dernier ne reçoit pas les events du clavier).S'il ya quelque chose de mystère dans la fonction ci-dessus autre que la lecture seule du combobox et que je ne suis pas arrivé à comprendre veuillez m'eclaircire plus le but de ces 28 lignes.
Amicalement/A bientôt
18 avril 2006 à 08:17
outre le fait que ton astuce, un peu tirée par les cheveux reviens a mettre le controle en mode DropDownList (ma suggestion)...
l'idée, là, c'est que le clic sur le List ne modifie pas le SelectedItem
17 avril 2006 à 00:12
voilà dans l'evenement (Keypress) du combobox tu ajoute la phrase : Keyascii=0 et comme ça ton combobox ne reçoit aucune ecriture.
10 avril 2006 à 21:28
ca rend le champ de saisie ET la liste déroulante inactifs, mais sans que la comboBox prenne l'aspect "flouté", comme quand on met Enabled à True.
8 avril 2006 à 10:15
ca fait que l'on ne peux pas saisir de texte dans la zone 'edit' du combobox,
et que l'on est obligé de cliquer sur les differents items...
finallement, comme si on changeais simplement les propriétés du ComboBox, pour le mettre en DropDownList.....