![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Вроде бы инициированы все...
А твой вариант вполне подошел бы, просто я не смог его доделать под себя((((( Если можно доделай его)) Блин, мне уже стыдно, столько времени уделяешь ![]() Чтобы мы, чайники, делали... |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
По-моему так
Это сообщение отредактировал(а) diadiavova - 21.2.2009, 22:45 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
То же самое сообщение появляется.
В чем же дело блин... |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Тогда выложи проект(или его часть), надо смотреть.
Добавлено через 2 минуты и 49 секунд Кстати: последний вариант сработает, если все текстбоксы расположены в одном контейнере. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
||||
|
||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Простейшим способом решения проблемы является вот такой код
Однако, надо объяснить причину случившегося и общие приёмы решения подобных проблем. В общем и целом: проблема возникла из-за того, что ты в дизайнере инициировал свойство Text. Казалось бы, ничего криминального в этом нет, однако тут есть нюанс. Если открыть код сгенерированный дизайнером, то там можно обнаружить следующее
Обрати внимание: сначала инициируются свойства, а потом контрол добавляется на форму. Когда свойству Text элемента Поле1 ты присваеваешь значение инициируется событие TextChanged этого элемента. В обработчике события ты обращаешься к свойству Parent этого элемента, но пока он не добавлен в коллекцию Controls формы это свойство у него равно Nothing и любое обращение к нему приводит к исключению. Кроме того: поиск следующего текстбокса в данной ситуации приведёт к тому же эффекту(он ещё не создан). То есть ошибку этот код вызывает по одному разу для каждого контрола(во время инициализации) Первый способ обойти эту неприятность я уже представил. Что можно сделать ещё...
Что мы делаем вданном случае? По событию Load формы(то есть кода всё уже инициировано) перебираем размещённые на ней контролы, и если контрол является текстбоксом и не является последним из них(с него некуда переводить фокус), то каждому такому текстбоксу назначаем обработчика события TextChanged. Если боксы расплоложены не на форме а в другом контейнере, то обходить надо контролы контейнера. ЗЫ Постарайся разобраться в коде, а не копипастить. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Перевариваю уже сутки...
Действительно, если не понять код, то проще просто заказать то что нужно... А изучаем для того чтоб сами писали проги... Кое что ясно, кое что нет... Продолжаю изучать... Добавлено через 2 минуты и 55 секунд diadiavova, расскажи плиз, если можно, немного про CType, доступно. |
|||
|
||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
http://msdn.microsoft.com/ru-ru/library/4x2877xb.aspx Как доступно - не знаю, но опишу на приведённом примере. Здесь в цикле перебираются все контролы расположенные на форме. Коллекция Controls содержит элементы типа Control. Этот тип является базовым для всех элементов управленя, то есть элементом данной коллекции может быть любой контрол. Проблема в том, что внутри цикла мы подписываем обработчика событию TextChanged, а у класса Control такого события нет. Событие это есть у текстбокса(который тоже является контролом), поэтому мы проверяем тип переменной с и если это текстбокс, то прежде чем подписывать обработчика события сначала надо преобразовать к типу TextBox, кстати в коде ошибка, которую компилятор проглотил, но для точности вместо
надо писать
Переменная tb имеет тип TextBox а не Control(как с). Неправильный вариант сработал потому, что по-умолчанию в проектах VB отключена опция Option Strict. Благодаря этому можно было написать такой код
и компилятор проглотил бы(наверное) не смотря не несоответствие типов. Во всех подобных случаях CType вызывается неявно. Иногда, даже при отключеной Option Strict всё равно требуется явное приведение типов. В любом случае: лучше делать это явно. Ещё: преобразование проходит без ошибок, потому что предварительно проверяется тип контрола. если на форму кинуть что-то ещё(кнопку, например) и попробовать в таком случае преобразовать контрол в текстбокс(не проверяя тип предварительно) - вылезет ошибка. Здесь принцип такой: всё, что на форме - контролы, но при преобразовании надо учитывать какой именно конрол ты обрабатываешь в конкретном случае. Вроде объяснил. ![]() Это сообщение отредактировал(а) diadiavova - 24.2.2009, 14:37 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
timich |
|
||||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Спасибо!
![]() Теперь все работает. Вот последний вариант кода
Правда он работает только если все тексбоксы на панели лежат. Если просто на форме, то нет. Но это не важно. И пришлось добавить строку
Еще пара вопросов и тему можно будет закрыть ![]() 1. Как же сделать так чтобы перепрыгивать текстбокс, Enabled которого равен False? 2. Что такое Parent? Или, еще лучше, что означает строка Dim nextBox = sr.Parent.GetNextControl(sr, True).Focus() 3. Где можно читать разъяснение элементарных вещей? Например что такое пространство имен??? Ведь не представляя себе четко такие вещи, вряд ли можно продвинуться в чем то более серьезном... MSDN конечно хорошо, но для самоучки сложноватые объяснения однако... Может стоит создать тему по таким детским вопросам по VB.Net??? Будет ли кто нибудь отвечать на такие вопросы??? ![]() ![]() ![]() |
||||
|
|||||
diadiavova |
|
||||||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Эта строка появилась в моём коде из-за того, что я предлагая разные варианты решения, просто копипастил предыдущий вариант и вносил в него изменения(кое что недоглядел)
а потом
Так будет правильнее. Теперь по существу дела. В последнем варианте ты (извини) обосрал всё, что я предложил перед этим. Варианты предложенные перед этим не предполагали, что ты будешь их объединять. Предпочтительнм является второй вариант, а первый я написал в силу того, что он подразумевал небольшую коррекцию кода. Конструкция Try...Catch предназначена для обработки исключительных ситуаций и использовать её в логике программы нежелательно(разве что, в крайних случаях). Для подписки обработчика события в васике существует две конструкции: 1. Использование Handles в декларации самого обработчика. 2. Использование AddHandler в коде. Ты используешь оба варианта....зачем? Чем тебя это не устроило?
В выложенном мной ранее проекте я не только проверяю размер строки, но и является ли строка целым двузначным числом. Непонятно, почему этот вопрос возник снова.
Честно говоря, я думал, что это и так должно работать, но если бы ты выложил проект, в котором некоторые боксы неактивны, то я заметил бы, что это не так(если, конечно, это действительно не так). Когда выкладываешь проект, надо что бы он содержал все элементы, вызывающие затруднение. Если мой вариант не пропускает неактивные боксы, а тормозит на них, то всё придётся делать по-другому(перебирать в цикле). Парент - это контрол, на котором расположен данный контрол. Если контрол лежит на форме, то парентом для него является форма, а если на панели - панель. мсдн, книги, статьи. В сети очень много материалов. В основном надо искать по платформе .Net(а не по языку). Всего лишь средство для логического распределения типов. С их помощью типы, предназначенные для одних целей размещаются в одном месте(пространстве). Полное имя типя включает в себя пространство имён. Но если в код импортировать некоторые пространства, то имена типов можно писать без имени пространства имён. Пример: класс для работы с изображениями называется System.Drawing.Image причём System.Drawing здесь пространство имён. Но если в код импортировать это пространство, то можно писать просто Image К мсдн надо привыкнуть. Чем больше знаешь, тем понятнее всё становится.
Здесь есть форум .Net для новичков. В заголовочной части этого форума есть тема Ламерские вопросы. А язык изучить не сложно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||||||||
|
|||||||||||||
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
diadiavova, напиши пожалуйста в этом примере как все должно выглядеть на самом деле.
Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Я сначала переделал твой код, а потом, когда увидел, что от первоначального варианта почти ничего не осталось, решил сделать другую форму. Оба варианта работают, но первый - неудачный.
Несколько комментариев по коду: конструкция
эквивалентна следующему коду
Это работает для всех булевых свойств. У тебя в коде слишком сильная привязка к конкретным полям, что приводит к излишнему коду и трудностям в случае, если понадобится что-то изменить. Надо использовать контейнеры. В моём примере я применил TableLayoutPanel. Код сделал таким, что он одинаково работоспособен при любом количестве строк столбцов и текстбоксов. Адаптировать его к другим условиям - тоже не проблема. И , даже, если надо сделать собственный контрол с такой функциональностью, но настраиваемый, то мои коды в нём можно использовать почти без изменений. Работа в дизайнере тоже заняла насколько минут и если надо передвинуть всю конструкцию или ещё что, то с панелью это сделать - не проблема. Всестороннего тестирования не проводил, но вроде работает как надо. Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Класс!!
Только почему то с цифровой клавиатуры цифры не вводятся, только с основной.
Тще это Not? |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Естесственно. Насчёт клавиатуры потом посмотрю, пока попробуй NumLock переключить -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
timich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
NumLock включен
![]() ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |