Question

Est-il un moyen de désactiver la saisie multi-ligne entrées dans une Zone de Texte (c'est à dire, je voudrais arrêter mon les utilisateurs de faire ctrl-enter pour obtenir un retour à la ligne)?

Était-ce utile?

La solution

J'ai été en mesure de le faire sur l'utilisation de l'événement KeyPress.Voici l'exemple de code:

Private Sub SingleLineTextBox_ KeyPress(ByRef KeyAscii As Integer)
    If KeyAscii = 10 _
        or KeyAscii = 13 Then
            '10 -> Ctrl-Enter. AKA ^J or ctrl-j
            '13 -> Enter.      AKA ^M or ctrl-m
        KeyAscii = 0  'clear the the KeyPress
    End If
End Sub

Autres conseils

Je l'ai fait avant (et la dernière fois que j'ai travaillé dans l'Accès était autour de 97, si ma mémoire n'est pas si chaud) était en train de relever un événement haut et l'exécution d'une fonction VBA.C'est une méthode similaire à ce que vous faites avec un AJAX suggèrent zone de texte dans un cadre moderne formulaire de demande, mais je me souviens qu'il pourrait trébucher si votre formulaire d'Accès a d'autres événements qui ont tendance à se produire fréquemment un onMouseMove sur l'ensemble de la forme de l'objet.

À l'aide de l'événement KeyPress signifie que votre code le feu à chaque fois que l'utilisateur tape.Cela peut conduire à scintillement de l'écran et d'autres problèmes (l'événement OnChange serait le même).

Il me semble que vous devriez utiliser un seul événement à dépouiller le CrLf, et que l'événement AfterUpdate.Il vous suffit de faire ceci:

  If InStr(Me!MyMemoControl, vbCrLf) Then
     Me!MyMemoControl = Replace(Me!MyMemoControl, vbCrLf, vbNullString)
  End If

Notez l'utilisation de l'Accès des constantes globales, vbCrLf (pour les Chr(10) & Chr(13)) et vbNullString (pour une chaîne de longueur nulle).

À l'aide d'une règle de validation signifie que vous allez pop up un vilain message d'erreur pour l'utilisateur, mais de leur fournir avec peu d'outils pour corriger le problème.Le AfterUpdate approche est beaucoup plus propre et plus facile pour les utilisateurs, me semble.

pas sûr de cela, vous devriez être en mesure de supprimer les sauts de ligne lorsque vous effectuez le rendu du contenu, ou même exécuter un script vbscript pour le vider, il vous suffit de cocher pour chr(13) ou vbCrLf.

Si vous ne voulez pas un événement interférer, vous pouvez configurer la Règle de Validation de propriété de la zone de texte pour être

NOT LIKE "*"+Chr(10)+"*" OR "*"+Chr(13)+"*"

Vous voudrez probablement pour définir le Texte de Validation pour expliquer plus précisément pourquoi l'Accès est jeter une boîte d'erreur.

Merci Ian et BIBD.J'ai créé un public sub basé sur votre réponse qui est réutilisable.

Public Sub PreventNewlines(ByRef KeyAscii As Integer)
    If KeyAscii = 10 Or KeyAscii = 13 Then KeyAscii = 0
End Sub

Private Sub textbox_KeyPress(KeyAscii As Integer)
    Call PreventNewlines(KeyAscii)
End Sub

Le scintillement de l'écran ne devrait jamais être un problème, car ceux-ci sont gérés les événements, et non constante interrogation (et c'est par le contrôle de la limitation de la portée).Me semble que comme un argument non valide, car chaque éditeur de texte est en cours d'exécution du code par de frappe.

Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top