Вопросы | ms-access

Отключение многострочных полей в MS Access

Вопрос

BIBD | 5240 просмотров | рейтинг: 0

Есть ли способ отключить ввод многострочных записей в текстовом поле (т. Е. Я бы хотел, чтобы мои пользователи не нажимали ctrl-enter для получения новой строки)?



Ответы

BIBD

+ 0 -
не совсем уверенный в этом, вы должны быть в состоянии удалить разрывы строк при рендеринге контента, или даже запустить vbscript для его очистки, вам просто нужно проверить chr (13) или vbCrLf.  


Mauro

+ 3 -
То, как я это делал раньше (а последний раз, когда я работал в Access, было где-то в 97-м, поэтому у меня не так жарко) вызывало событие key-up и выполняло функцию VBA. Этот метод аналогичен тому, что вы делаете с текстовым полем подсказки AJAX в современном приложении веб-формы, но, насколько я помню, он может сработать, если в вашей форме доступа есть другие события, которые часто происходят, например, onMouseMove, по всему объекту формы.  


Ian Patrick Hughes

+ 5 -
Я смог сделать это с помощью события KeyPress. Вот пример кода:
 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
 

 


Jason Z

+ 0 -
Если вы не хотите, чтобы вмешивалось событие, вы можете установить свойство Правило проверки для текстового поля, чтобы
 NOT LIKE "*"+Chr(10)+"*" OR "*"+Chr(13)+"*"
 

Возможно, вы также захотите установить текст проверки, чтобы объяснить, почему Access выбрасывает окно с ошибкой.  


David-W-Fenton

+ 2 -
Использование события KeyPress означает, что ваш код будет срабатывать каждый раз, когда пользователь печатает. Это может привести к мерцанию экрана и другим проблемам (событие OnChange будет таким же). Мне кажется, что вы должны использовать одно событие для удаления CrLf, и правильное событие будет AfterUpdate. Вы бы просто сделали это:
   If InStr(Me!MyMemoControl, vbCrLf) Then
     Me!MyMemoControl = Replace(Me!MyMemoControl, vbCrLf, vbNullString)
  End If
 

Обратите внимание на использование глобальных констант Access, vbCrLf (для Chr (10), Chr (13)) и vbNullString (для строки нулевой длины). Использование правила проверки означает, что вы собираетесь выдавать неприятное сообщение об ошибке своему пользователю, но предоставите им мало инструментов для решения проблемы. Мне кажется, что подход AfterUpdate намного чище и проще для пользователей.  


kernelk

+ 0 -
Спасибо Ян и BIBD. Я создал общедоступную подписку на основе вашего ответа, который можно использовать повторно.
 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
 

Мерцание экрана никогда не должно быть проблемой, так как это обработанные события, а не постоянный опрос (и каждый элемент управления еще больше ограничивает область действия). Мне кажется, что это неверный аргумент, так как каждый текстовый редактор выполняет некоторый код для каждого нажатия клавиши. Спасибо


Теги

ms-access