Страница: 1 | 2 |
Вопрос: Вопрос по оптимизации кода
Добавлено: 20.12.07 13:26
Автор вопроса: KreAtoR
У меня в программе есть много TextBox в которые можно вводить только числа.
В Сабе KeyPress стоит условие
If (KeyAscii < 48 Or KeyAscii > 57) And (KeyAscii <> 8) Then KeyAscii = 0
оно в принципе во всех одинаковое.
Незнаю как лучше сделать.
Вынести это условие в функцию, то тогда какое значение должна передавать функция????
Вынести в саб, то тогда как будет передаваться 0???
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #1
Добавлено: 20.12.07 13:30
а чем тебе так не нравится?.. Всего лишь одна строка
Номер ответа: 2
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #2
Добавлено: 20.12.07 13:49
строка то одна, но стоит она везде.
десять раз копируется.
Хотелось бы ее в процедуру запихать а если надо то эту процедуру вызывать. Вопрос только как значения передать обратно.
Или думаете смысла нету так извращаться
Номер ответа: 3
Автор ответа:
AL
Вопросов: 7
Ответов: 21
Профиль | | #3
Добавлено: 20.12.07 14:36
Используй массив TextBox
Номер ответа: 4
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #4
Добавлено: 20.12.07 15:43
Да вы чаво? Тут делов то...
Private Sub Edit_KeyPress(KeyAscii As Integer)
ValidateKey KeyAscii
End Sub
Sub ValidateKey(ByRef KeyAscii As Integer)
If (KeyAscii < 48 Or KeyAscii > 57) And (KeyAscii <> 8) Then KeyAscii = 0
End Sub
Номер ответа: 5
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #5
Добавлено: 20.12.07 15:46
а значение 0 возвращается???
Номер ответа: 6
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #6
Добавлено: 20.12.07 15:54
Да.
Можешь проверить. )
Номер ответа: 7
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #7
Добавлено: 20.12.07 15:58
На будущее: погугли и почитай темку "передача параметров по значению и по ссылке".
Кратко говоря, при передаче по значению в саб передается копия переменной, а при передаче по ссылке передается ссылка на переменную. Вот во втором случае ты и можешь изменять внешнюю переменную внутри саба.
Номер ответа: 8
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #8
Добавлено: 20.12.07 16:03
ByRef просматрел теперь все понятно сенкс
Номер ответа: 9
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #9
Добавлено: 20.12.07 21:44
Дааа, я когда-то не знал об этом
Просто шокирован был и не понимал, что творится с переменными))
Номер ответа: 10
Автор ответа:
Иван
Вопросов: 34
Ответов: 53
Web-сайт:
Профиль | | #10
Добавлено: 22.12.07 17:19
А как Вы при этом защищаете текстбокс от вставки запрещенных символов через буфер обмена?
Номер ответа: 11
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #11
Добавлено: 22.12.07 23:35
Иван, ну ты даешь!
Никак естественно. баги&апдейты хлеб программиста))
Номер ответа: 12
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #12
Добавлено: 22.12.07 23:45
Вообще я думаю надо проверку сделать на Validate
Если фигня какая, то ставит 0 например. А как иначе с контролвэ справиться?
Номер ответа: 13
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #13
Добавлено: 23.12.07 11:08
Проверку надо сделать в событии Change и не париться
Номер ответа: 14
Автор ответа:
Иван
Вопросов: 34
Ответов: 53
Web-сайт:
Профиль | | #14
Добавлено: 23.12.07 13:48
Я применяю следующий способ валидации содержимого буфера обмена.
1) Устанавливаю ключевые слова (точнее, буквосочетания): NUM (только числа), INT (целые числа), IN+ (целые положительные числа), MAX(999) (максимальное значение числа) и т.п.
2) В свойстве Tag текст-бокса в дизайн-моде ввожу, например: NUM-IN+MAX(20)
3) При команде Вставить вызывается функция-валидатор, которая ищет в таге ключевые слова (при помощи оператора Like). Найдя NUM, функция проверяет, является ли текст в Буфере числом; если нет - выдается сообщение, функция возвращает False, и вставка отменяется; если да, то функция ищет следующее ключевое слово, и, найдя, производит следующую проверку. Ну, и так далее. Если все проверки прошли успешно, функция возвращает True, и производится вставка.
Номер ответа: 15
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #15
Добавлено: 23.12.07 16:56
о, может еще и сорсы этой системы дашь?