Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет несколько символов в поле / 19 сообщений из 19, страница 1 из 1
28.10.2016, 17:57
    #39336559
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Всем добрый вечерь!
Есть задача.
Есть поле называется "Поле1"
Я хочу сделать так что бы пользователь при наборе или при вставление из буфер обмена, автоматический не вставляйся некоторые символы. (которые не допускают в название папках)
Вот у меня есть пример на один символ:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Поле1_Change()
If InStr(1, Поле1.Text, ",") Then
    Поле1.Text = Replace(Поле1.Text, ",", "")
    Поле1.SelStart = Len(Поле1.Text)
    Поле1.SelLength = 0
   End If
End Sub


Может кто то знает как будет код на несколько символов...
Спасибо!
...
Рейтинг: 0 / 0
28.10.2016, 18:44
    #39336597
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Код: vbnet
1.
Text = Join(Split(Text,WrongChar),"")
...
Рейтинг: 0 / 0
29.10.2016, 05:21
    #39336744
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Abisma2008,

Повторите несколько раз Replace с разными символами, ну или так:

Код: vbnet
1.
2.
3.
4.
strBad = "|\/:""<>?*"
For i = 1 To Len(strBad)
    strRes = Replace(strRes, Mid$(strBad, i, 1), strNewChar)
Next



Akina,

Split в данном случае работает так же, как и Replace - будет искать в качестве разделителя всю строку WrongChar, а не каждый символ в отдельности
...
Рейтинг: 0 / 0
31.10.2016, 09:02
    #39337512
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
MrShin, Akina
Доброе утро!
Не работает оба пример!
Или я чего то не так делаю(
...
Рейтинг: 0 / 0
31.10.2016, 09:33
    #39337538
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Abisma2008,
Что именно не работает в моем примере? Я его взял из полностью рабочей функции, которая заменяет запрещенные символы для имени файла. Сюда только не попало strNewChar="_", в вашем случае это будет пустая строка - ""
...
Рейтинг: 0 / 0
31.10.2016, 09:41
    #39337548
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
MrShin,
Спасибо за быстрый ответ!
Вот что у меня получилось:
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub Поле1_Change()
strBad = "|\/:""<>?*"
For i = 1 To Len(strBad)
    strRes = Replace(strRes, Mid$(strBad, i, 1), "")
Next
End Sub
...
Рейтинг: 0 / 0
31.10.2016, 09:48
    #39337553
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Должно быть как-то так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub &#207;&#238;&#235;&#229;1_Change()
Dim strBad As String
Dim strText As String
Dim i As Long

    strBad = "|\/:""<>?*"
    strText = &#207;&#238;&#235;&#229;1.Text
    For i = 1 To Len(strText)
        strText = Replace(strText, Mid$(strBad, i, 1), "")
    Next
    
    &#207;&#238;&#235;&#229;1.Text = strText
    &#207;&#238;&#235;&#229;1.SelStart = Len(strText)
    &#207;&#238;&#235;&#229;1.SelLength = 0
End Sub



В вашем примере вы ничего не делаете с текстом поля.

И я настоятельно рекомендую в опциях VBA редактора поставить галочку Require Variables Declarations, это обеспечит автоматическое добавление выражения Option Explicit в начало каждого модуля, в существующие добавьте эту строку руками, иначе будете долго и нудно искать почему у вас что-то работает не так, как надо.
...
Рейтинг: 0 / 0
31.10.2016, 09:49
    #39337555
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Вот с русским:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Поле1_Change()
Dim strBad As String
Dim strText As String
Dim i As Long

    strBad = "|\/:""<>?*"
    strText = Поле1.Text
    For i = 1 To Len(strText)
        strText = Replace(strText, Mid$(strBad, i, 1), "")
    Next
    
    Поле1.Text = strText
    Поле1.SelStart = Len(strText)
    Поле1.SelLength = 0
End Sub
...
Рейтинг: 0 / 0
31.10.2016, 09:53
    #39337560
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Да, и Поле1.SelLength = 0 не нужно, т.к. когда присваивается значение SelStart, SelLenght автоматически сбрасывается в 0
...
Рейтинг: 0 / 0
31.10.2016, 10:12
    #39337588
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
MrShinИ я настоятельно рекомендую в опциях VBA редактора поставить галочку Require Variables Declarations, это обеспечит автоматическое добавление выражения Option Explicit в начало каждого модуля, в существующие добавьте эту строку руками, иначе будете долго и нудно искать почему у вас что-то работает не так, как надо.
Поставил галочку)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Поле1_Change()
Dim strBad As String
Dim strText As String
Dim i As Long

    strBad = "|\/:""<>?*"
    strText = Поле1.Text
    For i = 1 To Len(strText)
        strText = Replace(strText, Mid$(strBad, i, 1), "")
    Next
    
    Поле1.Text = strText
    Поле1.SelStart = Len(strText)
    Поле1.SelLength = 0
End Sub


буду на практике пробовать, если будут непонятки напишу!
Спасибо за помощь!
...
Рейтинг: 0 / 0
31.10.2016, 10:17
    #39337597
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Вообще код слегка проблемный. Отправление курсора в конец, когда юзер желает подкорректировать серединку, быстро доведёт его до белого каления... я бы модифицировал где-то до такого (схема):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Text1_Change()
With Text1
  part1 = left(.Text, .SelStart)
  part2 = mid(.Text, .SelStart+1)
  part1 = ReplaceBadChars(part1)
  part2 = ReplaceBadChars(part2)
  .Text = part1 & part2
  .SelStart = Len(part1)
End With
End Sub
...
Рейтинг: 0 / 0
31.10.2016, 10:22
    #39337602
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
AkinaВообще код слегка проблемный. Отправление курсора в конец, когда юзер желает подкорректировать серединку, быстро доведёт его до белого каления... я бы модифицировал где-то до такого (схема):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Text1_Change()
With Text1
  part1 = left(.Text, .SelStart)
  part2 = mid(.Text, .SelStart+1)
  part1 = ReplaceBadChars(part1)
  part2 = ReplaceBadChars(part2)
  .Text = part1 & part2
  .SelStart = Len(part1)
End With
End Sub


Я решил проблему по другому, на "потеря фокуса".
Пользователь что хочет пишет, а при потери фокуса все не нужные символы удаляются...
...
Рейтинг: 0 / 0
31.10.2016, 10:39
    #39337624
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Можно сделать еще проще. Просто не пропускайте недопустимые символы до поля:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Поле1_KeyPress(KeyAscii As Integer)
If InStr(1, "|\/:""<>?*", Chr(KeyAscii)) > 0 Then
    KeyAscii = 0
End If
End Sub



Нужно только свойство формы KeyPreview поставить в True, чтобы это заработало

Кстати, в моем коде выше ошибка, должно быть
Код: vbnet
1.
For i = 1 To Len(strBad)
...
Рейтинг: 0 / 0
31.10.2016, 10:47
    #39337638
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
MrShin , так ещё ж есть Ctrl-V...
...
Рейтинг: 0 / 0
31.10.2016, 10:49
    #39337643
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Abisma2008Я решил проблему по другому, на "потеря фокуса".
Пользователь что хочет пишет, а при потери фокуса все не нужные символы удаляются...
Тоже не очень хорошо... имхо правильнее выдать оператору баннер, возможно, почистить ввод от лишнего - но не выпускать его с поля, пока его содержимое не станет соответствовать норме.
...
Рейтинг: 0 / 0
31.10.2016, 10:53
    #39337646
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Akina MrShin , так ещё ж есть Ctrl-V...
+1
...
Рейтинг: 0 / 0
31.10.2016, 10:55
    #39337648
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
AkinaAbisma2008Я решил проблему по другому, на "потеря фокуса".
Пользователь что хочет пишет, а при потери фокуса все не нужные символы удаляются...
Тоже не очень хорошо... имхо правильнее выдать оператору баннер, возможно, почистить ввод от лишнего - но не выпускать его с поля, пока его содержимое не станет соответствовать норме.
Если честно не понял)
...
Рейтинг: 0 / 0
31.10.2016, 11:16
    #39337678
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Abisma2008 , ну если в поле ввода напихано чего не то, выдаём мессаджбокс "В поле ввода обнаружены недопустимые символы", и по закрытии возвращаем фокус обратно в поле ввода. И пока его содержимое не станет нормальным, не даём уйти на редактирование других полей.

Впрочем, это не отменяет общего Validate всей записи.
...
Рейтинг: 0 / 0
31.10.2016, 11:25
    #39337694
Abisma2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет несколько символов в поле
Akina Abisma2008 , ну если в поле ввода напихано чего не то, выдаём мессаджбокс "В поле ввода обнаружены недопустимые символы", и по закрытии возвращаем фокус обратно в поле ввода. И пока его содержимое не станет нормальным, не даём уйти на редактирование других полей.

Впрочем, это не отменяет общего Validate всей записи.
Аааа, понял. Да так лучше.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет несколько символов в поле / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]