powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Textbox параметры ввода
25 сообщений из 32, страница 1 из 2
Textbox параметры ввода
    #36532674
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, в общем моя проблема заключается в следующем: я ограничиваю ввод в поле textbox'а в качестве разделителя у меня используется запятая, нужно запретить ввод в поле двух и более запятых, и по возможности запретить вставку в поле данных из буфера.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ловите событие Change
Обрабатываете и перезаписываете свойство Text таким образом, чтобы там не было того, чего вам не нужно (двойных запятых, нецифровых символов и т.п.). Тогда и вставку из буфера не нужно будет запрещать.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532689
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

от повторяющихся запятых я пытаюсь избавиться следующим методом: сначала записываю в переменную длину поля textbox потом организую цикл с 0 по n (переменная за которую я обозначил длину textbox), вставляю условие типа if (textbox2.value=",") then p=p+1 (количество повторов запятых) потом считываю эту переменную , если p>=2 тогда сообщение об ошибке, проблема в том что я не пойму принцип обращения к элементам textbox'a с 0 по последний элемент, чтобы их сравнить ...
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532694
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezmontino,

используйте instr():
if instr(textbox1.text,",")>1 then
msgbox или что-то еще
end if
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532695
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezmontinoобращения к элементам textbox'a с 0 по последний элемент

если под "элементами текстбокса" вы подразумеваете символы в текстовой строке, то используйте команду Mid$.

но, в принципе, организовывать цикл по символам не нужно, есть функция InStr
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532696
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно вот так:

Код: plaintext
1.
2.
3.
4.
5.
Dim k As String
k = "fgdfg,dg,fd"

If Len(k) - Len(Replace(k, ",", "")) >  1  Then
  MsgBox "более одной запятой"
End If
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532697
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Prodezmontinoобращения к элементам textbox'a с 0 по последний элемент

если под "элементами текстбокса" вы подразумеваете символы в текстовой строке, то используйте команду Mid$.

но, в принципе, организовывать цикл по символам не нужно, есть функция InStr

да именно их я и подразумеваю, они начинают нумероваться с 0 или с 1?
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532698
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezmontino они начинают нумероваться с 0 или с 1?

с 1
однако, взгляните на пример выше
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532701
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот вам еще вариант
Код: plaintext
1.
2.
3.
4.
5.
Dim k As String
k = "fgdfg,dg,fd"

If InStr( 1 , k, ",") <> InStrRev(k, ",") Then
  MsgBox "более одной запятой"
End If
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532703
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поторопился
Instr() возвращает позицию первого вхождения...
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532715
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i=instr(textbox1.text,",")
if i<>0 then
i=instr(i+1,textbox1.text,",")
select case i
case is>o
msgbox "Больше одной запятой!"
end select
end if
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532759
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zchvv
i=instr(textbox1.text,",")
if i<>0 then
i=instr(i+1,textbox1.text,",")
select case i
case is>o
msgbox "Больше одной запятой!"
end select
end if

спасибо работает после msg дописал Textbox2.value=" ", чтобы очищалась после нажатия Ok
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532760
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с помощью события keypress можно запретить вставку из буфера?
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532764
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezmontinoс помощью события keypress можно запретить вставку из буфера?

нет
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36532963
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dezmontino,

Вставка из буфера имеет смысл, когда более одного символа...
Если значение TextBox изменилось более чем на один, то стираем свежее поступление :)
А вообще наверно как-то подругому делается...
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533059
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFrdezmontino,

Вставка из буфера имеет смысл, когда более одного символа...
Если значение TextBox изменилось более чем на один, то стираем свежее поступление :)
А вообще наверно как-то подругому делается...

я хочу запретить вставку из буфера, по скольку можно будет вставить 1 букву, текст, и вообще любой набор символов, а данное действие в дальнейшем приведёт к ошибке, по скольку с полями проводятся арифметические действия.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533065
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dezmontinoя хочу запретить вставку из буфера, по скольку можно будет вставить 1 букву, текст, и вообще любой набор символов, а данное действие в дальнейшем приведёт к ошибке, по скольку с полями проводятся арифметические действия.
Ну так и ограничивайте возможности ввода в поле. А то, что введено, проверяйте на корректность.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533075
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я поступаю принципиально иначе.
Пользователь может плясать в поле как угодно, но при попытке выйти из поля (потеря фокуса мышью, клавиша Tab), а также при нажатии Enter, проверяется корректность введенных данных. В случае некорректных данных - выдается сообщение с предложением продолжить редактирование или вернуть предыдущие корректные данные. В первом случае ему покидать поле запрещено.

Потому что, например, в 1С в качестве разделителя копеек используется вообще знак "=". Я не хочу запрещать пользователю скопировать число из 1С и вручную поправить разделитель.

Естественно, весь функционал однократно упаковывается в юзерконтрол, делаются свойства для ограничений (верхний/нижний лимит и т.п.) и забывается навеки.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533084
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЛично я поступаю принципиально иначе.
Пользователь может плясать в поле как угодно... Во-во: именно так.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533097
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по скольку с полями проводятся арифметические действия
dezmontino, похоже, вам надо проверять ввод более одной запятой в случае ввода, например, такой строки: "123,45,89" ?
Тогда Вам поможет IsNumeric:
Код: plaintext
1.
x = IsNumeric("123,58,52") 'x = false
y = IsNumeric("123,5852") 'y = true
Вообще, если Вы хотите использовать в дальнейшем введённые данные в вычислениях, без их проверки на корректность (в т.ч. с использованием IsNumeric() ) не обойтись.
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533194
AlexFr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dezmontino,

Всегда есть возможность проверить данные перед употреблением, если это предусмотрено автором. Событие отлавливается на лету, а остальное сказал Shocker.Pro и vlth. Я не знал зачем наложен запрет на буфер, поэтому предложил такое решение, как вариант. Вдруг запрет по причине обработки каждого символа сторонней процедурой в процессе ввода делается для получения текущих специфических эффектов, например, измерение скорости работы usera с клавой или обучение английскому с прменением механической памяти usera. А вообще можно сравнить поступившие данные с текущим содержанием буфера...
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533208
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хорошо попробую ловить через событие onChange и проверять через
x = IsNumeric(textbox2.text,",")

возникает следующий вопрос, у меня дома работает функция поиск решений, но на другом компьютере даже при подключении solver.xlam из refences пишет, что неизвестная функция, в чём может быть проблема? и почему у меня такой проблемы не наблюдается?

на обоих компьютерах excel 2007

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Private Sub CommandButton3_Click()
TextBox7.Visible = True
TextBox8.Visible = True
TextBox9.Visible = True
TextBox10.Visible = True
TextBox11.Visible = True
Label6.Visible = True
Label7.Visible = True
Label8.Visible = True
Label9.Visible = True
Label10.Visible = True
TextBox7.Enabled = False
TextBox8.Enabled = False
TextBox9.Enabled = False
TextBox10.Enabled = False
TextBox11.Enabled = False

    Range("B12").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B13").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B14").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("b15").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B10").Select
    ActiveCell.FormulaR1C1 = _
    "=R[-6]C*R[-7]C[3]*(1-R[2]C)+(R[-6]C*(R[-7]C[3]*(1+(1/3)*R[2]C)))*(1-R[3]C)+(R[-6]C*((R[-7]C[3]*(1+(1/3)*R[2]C))*(1+(1/3)*R[3]C)))*(1-R[4]C)+(R[-6]C*(((R[-7]C[3]*(1+(1/3)*R[2]C))*(1+(1/3)*R[3]C))*(1+(1/3)*R[4]C)))*(1-R[5]C)+R[-6]C*((((R[-7]C[3]*(1+(1/3)*R[2]C))*(1+(1/3)*R[3]C))*(1+(1/3)*R[4]C))*(1+(1/3)*R[5]C))"
    SolverOk SetCell:="$B$10", MaxMinVal:= 1 , ValueOf:="0", ByChange:="$B$12:$B$15"
    SolverSolve UserFinish = False

End Sub
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533453
dezmontino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

начал мудрить с событием onChange

e = Val(TextBox2.Value)
If (e = False) And (TextBox2.Value <> "") And (TextBox2.Value <> 0) Then
MsgBox "некорректный ввод", vbExclamation, "Внимание"
TextBox2.Value = ""
TextBox2.SetFocus
End If

но вот незадача
если я ввожу 0,"любое число" то вылезает сообщение MSg
вопрос почему? числа от 1-9 относятся же к числовым значениям

от одиночных запятых данная конструкция защищает
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533468
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы e зачем с False сравниваете?
...
Рейтинг: 0 / 0
Textbox параметры ввода
    #36533470
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
?Val("0.34")
  0 , 34  
?Val("0,34")
  0  

а это ответ на ваш вопрос
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Textbox параметры ввода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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