| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Не могу добавить новое свойство к TextBox |
| Автор: korob2001 21.1.2005, 23:06 | ||||
| Привет! Вобщем такая проблема, код из книги "Использование Visual Basic 6.0", со страницы 319 начинается пошаговое объяснение, как усовершенствовать элемент управления ActiveX. В данном случае речь идёт о текстовом поле, к которому нужно добавить свойство CharAccept, которое может иметь 3 значение от 0 до 3: 0 - текстовое поле принимает все символы ( значение по умолчанию ) 1 - текстовое поле принимает только буквы и BackSpace 2 - текстовое поле принимает только цифры и BackSpace Всё делал точно, как написано в книге, вот код:
Вроде всё нормально, проект успешно скомпилирован в .OCX файл. Добавляю его в новый проект Standard EXE, но не могу изменить новое свойство ни на стадии разработки, ни на стадии выполнения программы. На стадии разработки ввожу в поле CharAccept значение 1, но послетого как убераю фокус с этого поля, то сразу же востанавливается значение по умолчанию, т.е. 0. Как я понимаю что-то не так в этих процедурах:
но что именно не знаю, уже сто раз сверил это код с книгой, но никакого отличия так и не нашёл. В чём может быть проблема? Только, если вас не затруднит, поясните - почему так, а не иначе. Заранее спасибо, Денис |
| Автор: Gannibal 21.1.2005, 23:59 | ||
| как я смотрыу в этих процедурах всё нормально, даже пример нашёл на такую процедуру вот как оно используется смотри Сохранение свойств Из построения предыдущего ActiveX-элемента Вы знаете, что он может существовать в двух ипостасях - а именно на этапе разработки программы и на этапе её выполнения. Для передачи свойств из одного состояния в другое служит объект PropBag типа PropertyBag. Вставьте в код Вашего ActiveX-элемента следующие строки:
Убедитесь, что добавленный код позволяет запоминать свойства для нашего ActiveX-элемента. Для этого задайте какое-нибудь значение для свойств Password и MaxAttempt запустите программу и закройте её. Ваши значения для свойств Password и MaxAttempt будут сохранены (через объект PropBag). http://casco.narod.ru/prog/vb/activex/passwrd6.htm |
| Автор: korob2001 22.1.2005, 15:31 |
| Да, похоже проблема действительно не в этом. Но почему тогда, после того как меняю значение параметра CharAccept на любое другое и убираю фокус из поля значения, то оно тут же меняется на значение по умолчанию. Для того что бы вы могли протестировать у себя, просто создайте проект ActiveX Control, в форму добавьте текстовое поле, очитите его свойство Text, а свойству Name присвойте имя txtCharSet. Теперь в окно кода внесите код, который написан в первом посте, данной темы. Скомпилируйте проект в .OCX файл, подключите к проекту Standard EXE. Затем попробуйте изименить свойство CharAccept и уберите фокус из поля где только что изменили свойство. Если лень писать, то выложу его в zip архиве, в этом же zip'e будет и уже скомпилированный .OCX файл. |
| Автор: Naghual 22.1.2005, 17:13 | ||
| Тут все просто. Имеют место две ошибки. 1. В описаниях свойства Лет и Гет, переменная нового значения объявлена как вариант. При назначении нового значения, оно не является числом. Оно представляется в варианте как строковое значение. 2. В свойстве Лет происходит опознание не той переменной. Вы сравниваете текущее значение (chCharAccept, равный 0). Нужно сравнивать переменную назначенного значения (vNewValue). Из всего сказанного приведу только измененный код. Все остальное без изменений.
|
| Автор: korob2001 23.1.2005, 19:43 |
| Naghual - спасибо, всё работает. Это я прошляпил, в книге тоже так ниписано. Просто ошибку ожидал увидеть в другом месте. Огромное спасибо. |
| Автор: Staruha 23.1.2005, 21:33 |
| korob2001 (Online) - этого мало . У нас Naghual сегодня родился.Ура! |
| Автор: korob2001 23.1.2005, 21:37 |
| Ну Naghual, спасибо тебе дважды. А так как ты ещё и из Днепра, то трижды. ;)))))) |