![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| ServanteS21 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.4.2014 Репутация: нет Всего: нет |
Здравствуйте, столкнулся с проблемой при редактировании значения DataGrid, находящегося в Form1 из Form 2
Form1 (sprbk):
Form2(edtbk):
Компилируется, но при нажатии на ОК в форме редактирования (Form2) выдает ошибку "ссылка на объект не указывает на экземпляр объекта" Проблема точно в 4 и 5 строках дочерней формы, но как сделать правильно, я не знаю. PS: Простите быдлокодера, ну очень нужно... Это сообщение отредактировал(а) ServanteS21 - 29.4.2014, 18:28 |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
ServanteS21, я правильно понимаю, вторая форма выполняет просто роль редактора каких-то значений первой, то есть диалогового окна? Если так, то просто ознакомься с тем как работают стандартные диалоговые окна и сделай так же. В твоем случае мне сложно сказать в чем проблема, например не очень понятно что такое sprbk и как оно инициируется. Точнее понятно, что по идее это должна быть ссылка на первую форму, но как ты ее туда передаешь - из твоего фрагмента кода не видно. А вообще, как правило это плохая идея воздействовать из одной формы на другую. Все-таки ознакомься с тем, как действуют стандартные диалоговые окна. Они вообще не имеют никакой информации о вызывавшем их окне, тем не менее со своей задачей вполне справляются.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| ServanteS21 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.4.2014 Репутация: нет Всего: нет |
Да, вторая форма выполняет роль редактора, она необходима, так как в DataGrid отображаются не все поля, а только поля, необходимые для идентификации строки, для дальнейшего её редактирования.
sprbk - это родительская форма относительно edtbk. Как она инициируется не важно, но вот на всякий случай: Это все в main форме, которая является mdi контейнером:
Диалоговым окном можно объявить созданную мной форму? Это сообщение отредактировал(а) ServanteS21 - 29.4.2014, 20:05 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Я привел пример того, какая информация отсутствует, но может повлиять на описанную проблему. Полагаю, если бы ты знал, что важно, а что нет, то мог бы и сам решить свою проблему, но судя по всему это не так. Первое что тебе нужно определить в ситуации когда вылетает подобное исключение - это какая именно переменная не инициированна. Ты этого не указал, поэтому я обратил твое внимание на наиболее вероятную ошибку. Возможно дело в другой переменной, так что запускай отладку и когда вылетит исключение, проверь какой именно объект отсутствует. Я спросил не об этом. Я понимаю, что имеется в виду форма. Но ты ссылаешься на некую переменную с таким именем, вот я и спрашивю, в каком месте этой переменной присвоен объект формы. Да, но для того, чтобы она работала как обычный диалого ее надо малость переделать. Стандартный диалог может получить какие-то данные и отобразить их или может ничего не получить, а создать новый экземпляр данных - это не важно. Получает он данные путем присвоения какому-то его свойству объекта, содержащего эти данные. В результате редактирования свойство с данными будет уже возвращать отредактированные данные и все. Для того, чтобы запустить форму в режиме модального диалога, надо вызвать метод ShowDialog вместо Show. Этот метод возвращает экземпляр перечисления DialogResult. Тебе надо в обработчике ОК присвоить свойству формы DialogResult нужное значение (форма закроется автоматически), для Cancel надо сделать то же самое, только присвоить другое значение. ShowDialog возвратит именно то значение, которое будет присвоено форме при закрытии. Дальше в If проверяешь, что ShowDialog возвратил OK и извлекаешь из диалога все необходимые данные из свойства, специально для этого созданного. То есть вместо того, чтобы из формы2 воздействовать на форму1, ты все эти действия выполняешь в форме1(извлекаешь данные и присваиваешь нужным полям). Ну как-то так. Если объяснение показалось путанным, то почитай в документации о работе с диалогами, а потом вернись и перечитай написанное. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| ServanteS21 |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.4.2014 Репутация: нет Всего: нет |
Дядь, извините мальчонку дерзкого, но ведь действительно не в этом дело...
А вот тут пришло мое время удивляться, я-ж ###кодер, я не умею, а время жмет капец как... Можно поподробнее об этом процессе?
Понял, я так понимаю, ответ получен?
О гак... Вроде всё понял, но вот беда: с синтаксисом у меня бядааа... Такой вопрос: "Вы спать не планируете пока? Можно с Вами в скайпе пообщаться? А то я практически решил задачу. только вот вопрос возник небольшой, об который уже часа полтора долблюся... |
||||||||
|
|||||||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Ну начать можно отсюда http://msdn.microsoft.com/ru-ru/library/awtaffxb.aspx Например с такого пошагового руководства http://msdn.microsoft.com/ru-ru/library/kya29xtx.aspx Добавлено через 1 минуту и 39 секунд Ну это тебе виднее. Но ошибка, которую ты упомянул всегда появляется именно когда ты обращаешься к неинициированной переменной, свойству и т.д. Добавлено через 7 минут и 13 секунд
По диалоговым окнам вот раздел http://msdn.microsoft.com/ru-ru/library/2c...=vs.110%29.aspx Видимо все там. К примеру начни отсюда (просмотрел мельком, но вроде то что надо) http://msdn.microsoft.com/ru-ru/library/ca...=vs.110%29.aspx Добавлено через 7 минут и 53 секунды -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| ServanteS21 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.4.2014 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
| ServanteS21 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.4.2014 Репутация: нет Всего: нет |
Обновлю, не понял я где я должен объявить TextBox и зачем, также не очень понял, зачем мне объявлять CurrentRow существующего DataGrid (что может оказаться необъявленным в "sprbk.BooksDataGridView.CurrentRow.Cells(1).Value = crtdttm.Value"), но решил уйти от CurrentRow и сделал следующее:
Объявил глобальную переменную:
Создал процедуру в Form1, осознал, что так правильнее:
И, соответственно вызвал ее в Form2:
Собственно, теперь выдает ошибку "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index" Проверял дэбагом, main.iRowNumber получает значение индекса строки, но вот параметр Rows в "BooksDataGridView.Rows(main.iRowNumber).Cells(2).Value = value1" его принимать отказывается. Подскажите, пожалуйста, в чем может быть проблема? и переменную какого типа тогда использовать для хранения индекса строки датагрида? |
||||||
|
|||||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Я тоже этого не понял. Вопрос видимо следует адресовать тому, кто дал тебе такой совет (это был точно не я). Я только спросил, где объявляется переменная, хранящая ссылку на вызывающую форму и как эта переменная инициируется. Кроме того я написал, что тебе следует выяснить с помощью отладчика какая именно переменная не содержит ссылку на объект. Очень сложно дать какой-то совет, когда отсутсвуют важные данные. Видимо ты забываешь о том, что я знаю о твоем приложении ровно то, что ты сообщил и не вижу всей картины.
Опять-таки всей картины нет, поэтому можно только предположить, исходя из того, какие ошибки наиболее часто допускают новички. Например следует задать тебе вопрос, не забыл ли ты о том, что индексация начинается с нуля и таким образом индекс последнего элемента всегда на единицу меньше общего их количества. То есть если у тебя пять строк, то индекс последней будет 4, а попытка обратиться к элементу с индексом 5 вызовет то самое исключение. Кроме того обрати внимание на то, что индексируются у тебя не только строки, но и ячейки и убедись, что исключение вызывают не они. Но вообще, в отладчике можно получить всю информацию. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| ServanteS21 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.4.2014 Репутация: нет Всего: нет |
Для полноты картины могу выложить проект. Про то, что индексация начинается с нуля я в курсе, но проблема точно не в этом. Таки я не умею работать с отладчиком, времени очень мало, так что не научусь, но обещаю в дальнейшем. Это сообщение отредактировал(а) ServanteS21 - 2.5.2014, 20:15 |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Эмммм... ну если там не очень много разбираться, то могу посмотреть.
Ну тебе виднее. Возможно проблема есть с глобальной переменной ибо они - зло. Но опять-таки, все это определяется во время отладки, поскольку вариантов тут море.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |