Сведения о вопросе

Ислам

20:57, 15th August, 2020

Теги

ms-access    

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

Просмотров: 364   Ответов: 6

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



  Сведения об ответе

DINO

04:03, 15th August, 2020

Я смог сделать это с помощью события 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


  Сведения об ответе

lool

13:10, 28th August, 2020

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


  Сведения об ответе

PROGA

00:50, 7th August, 2020

Использование события KeyPress означает, что ваш код будет срабатывать каждый раз, когда пользователь вводит данные. Это может привести к мерцанию экрана и другим проблемам (событие OnChange будет таким же).

Мне кажется, что вы должны использовать одно событие, чтобы удалить CrLf, и правильным событием будет AfterUpdate. Ты просто сделаешь это:

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

Обратите внимание на использование глобальных констант доступа, vbCrLf(для Chr(10) & Chr (13)) и vbNullString (для строки нулевой длины).

Использование правила проверки означает, что вы собираетесь выдать пользователю неприятное сообщение об ошибке, но предоставить ему мало инструментов для исправления проблемы. Подход AfterUpdate гораздо чище и проще для пользователей, как мне кажется.


  Сведения об ответе

SSESION

20:52, 21st August, 2020

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


  Сведения об ответе

P_S_S

22:38, 14th August, 2020

Если вы не хотите, чтобы событие вмешивалось, вы можете настроить свойство правила проверки для textbox, чтобы оно было

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

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


  Сведения об ответе

PHPH

06:26, 15th August, 2020

Спасибо йену и 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

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

Спасибо


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться