FONCTION POUR METTRE UN COMBOBOX EN READONLY SANS METTRE EXPLICITEMENT ENABLED À

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 8 avril 2006 à 10:12
bensehila81 Messages postés 1 Date d'inscription jeudi 11 mars 2010 Statut Membre Dernière intervention 31 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.

https://codes-sources.commentcamarche.net/source/36952-fonction-pour-mettre-un-combobox-en-readonly-sans-mettre-explicitement-enabled-a-false

bensehila81 Messages postés 1 Date d'inscription jeudi 11 mars 2010 Statut Membre Dernière intervention 31 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 sept. 2010 à 14:29
ok ok.
cs_sebeto Messages postés 7 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 29 septembre 2010
28 sept. 2010 à 13:26
Désolé pour la faute, "la ComboBox apparaît grisée"
cs_sebeto Messages postés 7 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 29 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 sept. 2010 à 11:31
pourquoi ne pas le mettre en Enabled = False, en ce cas ?
je ne comprends pas.
cs_sebeto Messages postés 7 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 29 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és 1 Date d'inscription dimanche 14 janvier 2007 Statut Membre Derniè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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 1 Date d'inscription lundi 22 octobre 2007 Statut Membre Derniè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és 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014
6 nov. 2007 à 09:15
normalement oui, je vais essayer de reproduire votre problème.
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 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és 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 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és 1 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 15 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és 86 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007 2
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és 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 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és 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 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és 1 Date d'inscription dimanche 16 mai 2004 Statut Membre Dernière intervention 2 juin 2006
2 juin 2006 à 19:44
Bonjour,
S.V.P. comment peut-on utiliser keyacii=0?
Merci.
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 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és 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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.....
Rejoignez-nous