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

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

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

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

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

Код: 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
20.03.2010, 20:53
    #36532697
dezmontino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
Shocker.Prodezmontinoобращения к элементам textbox'a с 0 по последний элемент

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

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

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

с 1
однако, взгляните на пример выше
...
Рейтинг: 0 / 0
20.03.2010, 20:56
    #36532701
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
вот вам еще вариант
Код: 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
20.03.2010, 20:58
    #36532703
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
Поторопился
Instr() возвращает позицию первого вхождения...
...
Рейтинг: 0 / 0
20.03.2010, 21:11
    #36532715
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
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
20.03.2010, 22:29
    #36532759
dezmontino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
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
20.03.2010, 22:30
    #36532760
dezmontino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
с помощью события keypress можно запретить вставку из буфера?
...
Рейтинг: 0 / 0
20.03.2010, 22:35
    #36532764
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
dezmontinoс помощью события keypress можно запретить вставку из буфера?

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

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

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

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

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

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

Всегда есть возможность проверить данные перед употреблением, если это предусмотрено автором. Событие отлавливается на лету, а остальное сказал Shocker.Pro и vlth. Я не знал зачем наложен запрет на буфер, поэтому предложил такое решение, как вариант. Вдруг запрет по причине обработки каждого символа сторонней процедурой в процессе ввода делается для получения текущих специфических эффектов, например, измерение скорости работы usera с клавой или обучение английскому с прменением механической памяти usera. А вообще можно сравнить поступившие данные с текущим содержанием буфера...
...
Рейтинг: 0 / 0
21.03.2010, 14:31
    #36533208
dezmontino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
хорошо попробую ловить через событие 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
21.03.2010, 20:00
    #36533453
dezmontino
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
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
21.03.2010, 20:19
    #36533468
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
вы e зачем с False сравниваете?
...
Рейтинг: 0 / 0
21.03.2010, 20:21
    #36533470
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Textbox параметры ввода
Код: plaintext
1.
2.
3.
?Val("0.34")
  0 , 34  
?Val("0,34")
  0  

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


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