Страница: 1 |
Страница: 1 |
Вопрос: как обнулить переменную, объявленную Static?
Добавлено: 24.09.08 01:29
Автор вопроса: DimDoc
Есть ли способ обнулить переменную, объявленную static из другой процедуры? Неужели перезапускать программу?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 24.09.08 01:57
Ну если извратиться, то можно так:
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 24.09.08 02:17
Самый верный способ - пересмотреть архитектуру своего приложения. Т.к. если возникает такое желания, как обнулить статик переменную из другого метода - это уже похоже на ошибку в днк.
Номер ответа: 3
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #3
Добавлено: 24.09.08 08:48
Спасибо!
вот почему возник вопрос...
В числовом поле ввода необходимо запретить второй decimalpoint. Если в процедуре KeyPress объявить статическую переменную для подсчёта попыток ввода десятичного разделитея - тогда всё работает отлично. Но...
При повторном использовании этого поля ввода - уже нельзя ввести ни одного decimalpoint!!!
.... я сейчас на работу. завтра пообщаемся.
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 24.09.08 12:52
Не проще ли объявить публичную/глобальную переменную?
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 24.09.08 16:22
В правильно спроектированном приложении не используются Static-переменные в процедурах.
Не понятно для чего вообще геморой с дополнительной переменной, не проще ли проверять наличие в тексте разделителя, и, если таковой уже имеется, отменять ввод символа
Номер ответа: 6
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #6
Добавлено: 24.09.08 23:06
Да... Чего то я наворотил вначале...
вот вариант, который работает (пока ошибок не нашёл)
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 25.09.08 21:16
Для отмены символа можно делать e.Cancel=True
InStr не используй, вместо него лучше txt1.Text.Contains(...)
Номер ответа: 8
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #8
Добавлено: 26.09.08 02:40
Зато нашёл такой вариант:
e.Handled = True ' значит - как будто событие произошло, но символ реально не вводится.
....
Заменил строку
If InStr(txt1.Text, "." = 0 Then
на
If sender.text.contains("." Then
замена txt1.Tex на sender.text позволяет не писать этот код для следующего поля ввода! для этого необходимо дописать в конце объявления процедуры txt1_KeyPress:
Handles txt1.KeyPress, txt2.KeyPress, txt3.KeyPress и т.д.
да, InStr я вспомнил из VB6, и сработало. А почему так делать не надо? Чем Contains() лучше???
Сейчас процедура выглядит так:
Номер ответа: 9
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #9
Добавлено: 26.09.08 02:41
смайлики случайно приклеились...
Номер ответа: 10
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #10
Добавлено: 26.09.08 02:43
да...
процедуру txt1_KeyPress переименовал в my_KPress