2009-10-28 6 views
0

Cela semble si simple mais je ne peux pas le comprendre. Il semble que je voudrais définir la propriété Locked à Yes, mais cela les empêche réellement de sélectionner quoi que ce soit dans la liste déroulante! Quand je dis readonly, je veux dire avoir la boîte combo préchargée avec des valeurs et forcer l'utilisateur à ne sélectionner qu'une de ces valeurs sans pouvoir les saisir.Comment faire une zone de liste déroulante en lecture seule dans Access 2000?

Des idées?

+0

On appelle généralement une « liste déroulante » au lieu d'un "zone de liste déroulante" –

+2

Not in Access.Et, en effet, le nom montre les origines du contrôle dans les outils de développement Microsoft, comme dans Windows 16 bits, la fonctionnalité a été fournie à l'origine par une zone de texte en combinaison avec une liste, d'où "combo box" la zone de texte et la zone de liste dans un seul contrôle. –

Répondre

2

Il y a une propriété Limit To List vous devez régler sur Oui

+0

First :) char char char – Fionnuala

3

La méthode standard pour y parvenir est de définir la propriété Limit To List-True.

L'utilisateur sera en mesure de taper du texte invalide mais s'il tabs loin ou presses Entrez un popup dire

Le texte saisi n'est pas un élément dans la liste

Et il sera contraint de choisir quelque chose dans la liste.

Ce n'est pas grande, par rapport à la véritable contrôle de la liste déroulante vous trouverez nulle part ailleurs (VB6, Winforms, .NET, etc.)

+0

La zone de liste déroulante Access ne peut pas avoir les comportements par défaut que vous aimez, mais il a beaucoup plus de propriétés et d'événements et est considérablement plus polyvalent. La zone de liste déroulante Access est conçue pour être utilisée dans une base de données dans laquelle vous devez restreindre l'entrée et informer les utilisateurs des entrées erronées. Les autres plates-formes n'étant pas spécialement conçues pour le développement d'applications de base de données, elles ne sont pas nécessairement aussi strictes quant à la manière dont elles gèrent les entrées non valides. Ceci est une fonctionnalité dans Access, pas un BUG - il est préférable que vous ayez ce comportement car il est approprié à l'objectif pour lequel Access a été créé. –

+0

L'événement NotInList est intéressant et mérite d'être mentionné, j'ai augmenté votre réponse. Même ainsi, il doit y avoir une faille d'interface utilisateur pour intercepter et rejeter les entrées invalides seulement après que l'utilisateur a fini de taper. Mieux UI est de repérer l'utilisateur qu'il doit choisir dans la liste en lui permettant seulement de choisir dans la liste. – hawbsl

+0

Si vous voulez intercepter * avant * l'événement AfterUpdate, vous avez les événements OnChange et BeforeUpdate dans lesquels le faire. L'événement OnChange n'est pas un très bon endroit pour évaluer les valeurs de zone de liste déroulante, mais l'événement BeforeUpdate est, car c'est là que vous pouvez pré-qualifier les données et annuler la mise à jour. Je ne suis pas entièrement sûr de l'ordre de ceux-ci par rapport à l'événement NotInList. Le point des événements Access est qu'il y a des valeurs par défaut qui gèrent tout, et vous pouvez coder tout ce que vous voulez pour remplacer les comportements par défaut. –

2

Il y a deux parties à ce que vous avez demandé:

une . Je veux dire, ayant la zone de liste déroulante pré-chargé avec des valeurs ...

Pour cela, il n'y a rien que vous devez faire - il suffit de régler la rowsource appropriée. Pour ajouter des valeurs à la liste, vous devrez faire un peu de travail, mais pour éviter cela, vous n'avez absolument rien à faire.

b. et forçant l'utilisateur à ne sélectionner qu'une seule de ces valeurs sans pouvoir taper lui-même.

Comme expliqué dans les autres réponses, vous devez définir la propriété LimitToList sur TRUE. Maintenant, les messages d'erreur que vous obtiendrez ne sont pas si bons, donc vous voudrez probablement définir l'événement NotInList pour qu'il soit plus convivial pour l'utilisateur. Quelque chose comme cela pourrait être approprié:

Private Sub MyCombo_NotInList(NewData As String, Response As Integer) 
    MsgBox Chr(34) & NewData & Chr(34) & _ 
     " is not one of the choices in the list.", _ 
     vbInformation, "Select from the list" 
    Me!MyCombo.Undo 
    Response = acDataErrorContinue 
    End Sub 

Si vous voulez ajouter à la liste, c'est là que vous souhaitez gérer cela aussi, mais puisque vous n'avez pas, il vous suffit de vous préoccuper d'informer l'utilisateur du problème (c'est-à-dire, les protéger du message d'erreur par défaut cryptique).

0

vous pouvez également ajouter ce code dans l'événement presskey de combobox

KeyAscil = 0 

msgbox " please select from list" 

cela empêchera les utilisateurs d'écrire dans combobox et afficher un message d'erreur

Questions connexes