Domanda

Esiste un modo per disabilitare l'immissione di voci su più righe in una casella di testo (ad esempio, vorrei impedire ai miei utenti di eseguire ctrl-invio per ottenere una nuova riga)?

È stato utile?

Soluzione

Sono stato in grado di farlo utilizzando l'evento KeyPress.Ecco l'esempio di codice:

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

Altri suggerimenti

Il modo in cui l'ho fatto prima (e l'ultima volta che ho lavorato in Access è stato intorno al '97, quindi la mia memoria non è così calda) stava generando un evento key-up ed eseguendo una funzione VBA.È un metodo simile a quello che fai con una casella di testo suggerita AJAX in una moderna applicazione di moduli web, ma, se ricordo bene, potrebbe inciampare se il tuo modulo di Access ha altri eventi che tendono a verificarsi frequentemente come onMouseMove sull'intero oggetto del modulo.

Utilizzando l'evento KeyPress significa che il tuo codice verrà attivato ogni volta che l'utente digita.Ciò può causare sfarfallio dello schermo e altri problemi (l'evento OnChange sarebbe lo stesso).

Mi sembra che dovresti usare un singolo evento per eliminare i CrLf e l'evento corretto sarebbe AfterUpdate.Faresti semplicemente questo:

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

Si noti l'uso delle costanti globali di Access, vbCrLf (per Chr(10) e Chr(13)) e vbNullString (per stringhe di lunghezza zero).

Usare una regola di validazione significa che visualizzerai un brutto messaggio di errore al tuo utente, ma fornirai loro pochi strumenti per correggere il problema.Mi sembra che l'approccio AfterUpdate sia molto più pulito e semplice per gli utenti.

non del tutto sicuro di questo, dovresti essere in grado di rimuovere le interruzioni di riga quando esegui il rendering del contenuto, o anche eseguire un vbscript per cancellarlo, devi solo controllare chr(13) o vbCrLf.

Se non vuoi che un evento interferisca, puoi impostare la proprietà Validation Rule per la casella di testo

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

Probabilmente vorrai anche impostare il testo di convalida per spiegare in modo specifico il motivo per cui Access genera una finestra di errore.

Grazie Ian e BIBD.Ho creato un sottotitolo pubblico riutilizzabile in base alla tua risposta.

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

Lo sfarfallio dello schermo non dovrebbe mai essere un problema, poiché si tratta di eventi gestiti, non di polling costante (ed è un controllo che limita ulteriormente l'ambito).Mi sembra un argomento non valido, poiché ogni editor di testo esegue del codice per sequenza di tasti.

Grazie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top