![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Ch0bits |
|
||||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 1 Всего: 62 |
Решил написать контрол SpinEdit, который должен содержать число, ограниченное верхним и нижним пределом, а также умеет его изменять колёсиком мыши и кнопками вверх и вниз.
Не пойму почему такие глюки: 1. При установке значения Digit, оно всё равно сбрасывается на 0, хотя MaxDigit и MinDigit работают нормально. 2. Не перехватывается нажатие клавиши!
|
||||
|
|||||
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 1 Всего: 62 |
Теперь осталась только первая ошибка. Да! Да! Я знаю какой я ламер! Это сообщение отредактировал(а) Ch0bits - 25.1.2006, 12:25 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Похоже на рекурсию: при изменении текста срабатывает OnTextChanged, в котором присваивается значение свойству Digit; в set-е этого свойства устанавливается новое значение у textBox1.Text, что опять приводит к вызову OnTextChanged - и так далее по кругу, до переполнения стека... Проверь, не валится ли какое-нибудь исключение в отладке.
-------------------- ![]() |
|||
|
||||
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 1 Всего: 62 |
mr.DUDA
Если бы была рекурсия, то GUI бы заметно подвисал и загрузке проца, но такого не происходит. Под отладкой: OnTextChange срабатывает только если текст изменился, т.е. если текст меняется на тот же самый OnTextChange не срабатывает. |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Во-первых, все свойства, которые видны в дизайнере, должны проверять режим, в котором находится контрол: в DesignMode или нет. Иначе будут непонятные глюки при работе в дизайн-тайме
Во-вторых, текст в текстбоксе вначале всегда "0", даже если поставить в дизайнере Digit в другое значение. Это просходит потому, что порядок инициализации компонентов следующий: 1) InitializeComponent() у SpinEdit, с установкой дефолтных значений MinDigit = MaxDigit = Digit = 0 2) InitializeComponent() у формы, присвоение свойств spinEdit1:
Как видно, сначала присваивается Digit, и срабатывает ограничение на макс. значение, т.к. MaxDigit всё ещё не проинициализирован и равен 0. В итоге имеем Digit=0. Чтобы этого не происходило, можно поддержать в своём контроле интерфейс ISupportInitialize, и в методах BeginInit / EndInit устанавливать и сбрасывать некий флаг, который использовать вместе с DesignMode. При добавлении SpinEdit на форму, в коде InitializeComponent формы будут автоматически добавлены вызовы BeginInit вначале и EndInit в конце. Вот код, который получился в результате:
-------------------- ![]() |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |