|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|||||||||||||||||
Не могу добавить UserControl на форму - ссылка на объект не указывает на экземпляр05.03.2019, 16:49. Показов 6641. Ответов 22
Метки нет (Все метки)
Доброго дня, господа!
Подозреваю что в какойто момент случился сбой эл.питания в результате "все сломалось". Собственно есть форма и несколько контролов на ней. Те контролы которые на ней были - с ними все ОК, они уже на форме, компилятся и даже все работает. Но добавить вновь созданный контрол на форму я уже не могу - ссылка на объект не указывает на экземпляр объекта. через колено добавил в MainForm.Designer.cs по образу и подобию ссылки на новый контрол, соответственно добился чтобы компилилось, но это же неправильно. Нужно чтобы студия сама ваяла код там где это возможно и нужно. В общем у меня уже идей не осталось, куда глянуть? Прошу помощи зала) Добавлено через 31 минуту чтобы предотвратить выпады в стиле "ячевангаштоле" попробую кусками выложить: при открытии дизайнера форм:
0
|
|||||||||||||||||
| 05.03.2019, 16:49 | |
|
Ответы с готовыми решениями:
22
Проблема с массивами + System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объект Ссылка на объект не указывает на экземпляр объекта Ссылка на объект не указывает на экземпляр объекта |
|
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
| 06.03.2019, 21:22 | |
|
0
|
|
|
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
|
|
| 06.03.2019, 21:59 | |
|
Попробуйте удалить app.config из AppData и пересобрать проект
0
|
|
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
||||||||||||
| 11.03.2019, 10:30 [ТС] | ||||||||||||
|
строку 45 (безусловно со всей инициализацией экземпляра Config() ) вынес в Program.cs,
![]() снова моргнул свет и теперь при попытке открыть Form1 вся студия закрывается. Удалил app.config - Form1 открылась но с кучей ошибок и предупреждений. Перекомпиляция и повторная попытка открыть форму привела к падению студии. Как-бы к работе приложения претензий нет, оно работает как ожидается. Может я не знаю какие-то безмолвные истины, сами собой разумеющиеся, о которых все знают но ничего не говорят? Может я не понимаю как обращаться с этими контролами? Изначально каждый контрол инициализировал свой экземпляр Config, свое соединение с нужными ему базами, по окончанию работы - закрывал соединение. Такое чувство что контролы "работают" даже когда студия не в отладке. На одном из контролов в RichTextBox вывалило exception с указанием ошибочной строки. Все вроде хорошо, так и должно быть, но напрягает что студия в этот момент ничего не отлаживала и проект не запущен. Вынос инициализации экземпляра Config() вообще вывел студию из равновесия, теперь даже форму открыть не может. Да, я знаю у меня вопросы дилетанта, хочу понять как с этим обращаться и что сделать со студией чтобы её не тошнило от моих действий. Поэтому прошу совета
0
|
||||||||||||
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|
| 13.03.2019, 16:58 [ТС] | |
|
вдогонку:
ситуация схожая Вполне логично предположу что в папке с проектом должен лежать <program>.exe.config но мне не дает покоя отсутствие exe-шника в корне проекта. Очевидно ./bin/ debug и release его не интересует ибо там конфиг-файл есть и в момент отладки он превосходно читается итогдалие. Однако: свежедобавленный юзерконтрол появляется в панели элементов после пересборки проекта, т.о. процесс компиляции не застал <program>.exe.config потому что я понятия не имею как должно начинаться имя файла ".exe.config" на момент компиляции юзерконтролов и где этот файл должен располагаться. Копипаст конфига из debug в ../../ без переименования не прокатил. Эксепшен блин. Добавлено через 1 минуту великолепно киберфорум отрыгнул ссылку на стэковерфлоу. ну хоть https://docs.microsoft.com/ru-... tion-files надеюсь не опрокинет
0
|
|
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|
| 14.03.2019, 13:54 [ТС] | |
|
продолжу монолог
Дизайнер смотрит не на app.config, а на конфигурацию текущей хост-машины (студия), поэтому ConfigurationManager.ConnectionStrings ["SqlConnectionString"] возвращает ноль в момент компиляции юзерконтрола. Внимание вопрос, уважаемые знатоки, как убедить его в обратном?
1
|
|
|
|
|||||||
| 14.03.2019, 17:12 | |||||||
Сообщение было отмечено judipav как решение
Решение
judipav,
Я не знаю почему именно у вас возникает исключение. Но у вас есть две проблемы общего характера. А именно: 1) Что у вас делает вот вся эта байда: Кликните здесь для просмотра всего текста
в конструкторе юзерконтрола? База данных (DAL) и представление (View) должны находится на разных концах приложения: Поэтому никаких инициализаций никаких ConnectionString в UserControl быть не должно. Функция UserControl - это отображение данных. Все. Инициализация каких-то там БД - вещь совершенно неуместная в UserControl. 2) Что касается политики использования конфиг файлов. В целом фреймворк не разрешает использовать конфиг приложения в сторонних (или своих-же) библиотеках. Я не уверен точно почему и зачем это сделано, но это факт. Прочитать конфиг приложения из dll конечно можно, но с долгими танцами с бубном. Поэтому, обращаться к конфигу из юзерконтрола - тоже плохая идея (хотя бы потому, что этот юзерконтрол потом может быть вынесен в отдельную dll и конфиги просто перестанут работать). В целом нужно делать так: делать интерфейс IConfig, и затем приложение читает свой конфиг, формирует объект IConfig и передает его явно в длл/классы/юзеркнтролы, которые нуждаются в конфигурировании. Либо же создается синглтон, который содержит ссылку на IConfig, что бы все нуждающиеся имели доступ к нему и могли прочитать оттуда необходимые параметры. Итого, нужно:
1
|
|||||||
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|
| 15.03.2019, 08:33 [ТС] | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|
| 15.03.2019, 16:07 [ТС] | |
|
Можно еще вопрос?
Мне нужно в пределах одного окна организовать смену элементов управления. Назовем это условно рабочими столами. Один содержит datagridview с кнопками, второй Combo/List/Text-box'ы что-то вроде формы для наполнения таблиц(ы) БД, третий что-нибудь еще и т.п. Какие инструменты более подходят для таких вещей? Я не нашел ничего подходящего кроме UserControl, однако (если я правильно понял) они и приводят к крэшу при попытке открытия главной формы во время проектирования, иногда главная форма с размещенными на ней UC открывается и в текст-боксах отображается развернутый exception.message, который по-идее должен валиться только при запущенной отладке или при работе приложения, но никак не в режиме дизайнера... На некоторых UC должно отображаться нечто последнее добавленное в таблицу, к примеру в Label.Text вывожу время последней добавленной записи в таблицу. Как-бы зашить эвент при инициализации или (bool)Visible=true не проблема, но насколько это правильно? Этап проектирования с этими UC сильно тормозится изза постоянного крэша главной формы и невозможности добавить на неё очередной UC. Последовал вашему совету и собрал все что хоть каким-то образом контактирует со службой/базой/app.config'ом и вынес в отдельную dll. Теперь любое взаимодействие со службами/БД исключительно через вызов функций экземпляра класса этой dll. Для чистоты эксперимента создал новый проект Windows Forms, в разделе Program инициализировал экземпляр класса вышеупомянутой dll и начал последовательно накидывать элементы, эвенты и вызовы через экземпляр класса новоиспеченной функции. Сначала на форму, затем на UserControl'ы, на третьем UserControl'е студия вылетела. Что-то мне подсказывает что зря я начал игрища с ЮзерКонтролами, развейте мои сомнения, пожалуйста, ну или направьте меня на путь истинный! Можно какой-нибудь статьей или главой книги по студии...
0
|
|
|
Фрилансер
805 / 312 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
|
||
| 15.03.2019, 16:46 | ||
|
0
|
||
|
|
||
| 15.03.2019, 17:30 | ||
|
Использовать UserControl можно и нужно. А ваши ошибки, вылеты и т.д. связаны просто с тем, что коде ваших UserControl происходят исключения. Особенно обратите внимание на конструкторы и на метод OnPaint (если он у вас есть) - эти два метода вызываются в режиме реактора. Кроме того, крайне желательно вынести UserControl в отдельную dll. Также здесь примеры использования UserControl: Создание программы - ООП модель, MVP Паттерн MVP для WinForms Также здесь: Архитектура ПО в WinForms (FAQ & HowTo)
0
|
||
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|||||||||||||||||||||||
| 18.03.2019, 14:20 [ТС] | |||||||||||||||||||||||
|
Перечитал ваш пост по-слогам, но что-то у меня не складывается... В решении добавил проект "библиотека dll", она должна подключаться к службе и получать ответ, она же содержит UserControl'ы, вероятно это неправильное решение, но я пробовал перенести контролы в другой проект - результат тот же. Если я правильно понимаю первым делом необходимо подцепиться к службе, сразу же получить некоторое значение и задать это значение полю. Эксепшены от try/catch должны писаться в richTextBox на этом же контроле.
0
|
|||||||||||||||||||||||
|
|
|
| 18.03.2019, 16:46 | |
|
judipav,
Я из вашего поста ничего не понял. Какое отношение имеют службы, WCF, Uri к юзерконтролам? Касаемо dll я лишь писал про то, что контролы нужно вынести в отдельный проект. Формы - в одном проекте, UserControl - в другом. Это нужно потому, что для кидания контрола на форму - он должен быть откомпилирован. Но откомпилировать проект сложно, если форма, куда вы кидаете контрол находится в том же самом проекте, что и кидаемый UserControl.
1
|
|
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|
| 11.04.2019, 11:28 [ТС] | |
|
Спасибо за ваш ответ!
Да, я сам слабо понимаю назначение юзерконтрола, честно говоря. Вероятнее всего я неверно принимаю его за "рабочее место", тогда поправьте меня. Мне нужно чтобы в пределах одной формы менялись элементы управления в зависимости от выбранной задачи. Например кидаем на форму MainMenu, в нем будут пункты подразумевающие условно "рабочее место". При выборе "рабочего места" текущему проставить visible=false а вновь выбранному visible=true. Тобишь в момент времени на форме только одно "рабочее место". Рабочее место - набор полей, кнопок и прочих контролов, например: Генератор некоего диапазона, у него есть стартовое и финишное значение и какойто булевый параметр, чтото значащий. По кнопке создается фоновая задача которая передает параметры некоему методу, условно Generate(int start, int end, bool isMetal), который реализован в службе WCF, и ждет когда служба ответит, ответ будет записан в RichTextBox на этой форме, который собственно подразумевается как простой лог. и таких "рабочих мест" условно может быть некоторое множество. подозрительно удобно выглядит usercontrol, однако сложности начались с того что этот элемент перед нанесением на форму необходимо компилировать, а при нанесении он выглядит так будто компонент исполняется со всеми вытекающими попытками инициализации клиента службы WCF. "Попытками" потому что в момент когда контрол инициализируется - непонятно какой .config он использует, логично бы предположить что app.config, но это не так, поскольку на usercontrol'е в поле предназначенном для вывода отловленных exception черным по серому пишется что не удалось выудить информацию из .config Недостаток знаний рукам покоя не дает - подсовывал в папку с проектом *.exe.config из debug, подсовывал app.config в debug и прочие неявные итерации и заигрывания с этим .config не привели к ожидаемому результату и пришлось признать что такие сложности быть не должны на такой задаче хотя и не настолько нетривиальной. В конце то концов я знаю пару десятков приложений из гос структур, с которых собственно идея с "рабочими местами" и была позаимствована, которые работают великолепно, к слову рабочих мест там больше чем пара сотен... Открыт к вашим великолепным идеям и превосходному опыту, собсно за тем я здесь
0
|
|
|
|
||||
| 12.04.2019, 00:43 | ||||
|
Я вам выше в посте #11 давал ссылки на темы, где все это подробно обсуждается. Но вы похоже ничего не вынесли из тех тем. В общем, в моем первом посте все подробно расписано, что вам нужно делать. мне добавить нечего.
0
|
||||
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
||
| 12.04.2019, 08:01 [ТС] | ||
|
Добрый день!
Я не завязан за юзерконтрол, а лишь описал свой опыт, и да, вызываю негодование у вас, но проявите терпимость! Предложите альтернативу? ПС дальше фразы можно не читать, это лишь мои ожидания от этого элемента
0
|
||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
|
| 12.04.2019, 08:18 | |
|
Вам же уже советовали использовать TabControl, чем он вам не угодил? Создаете несколько табов и на каждом табе свои элементы управления.
1
|
|
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
||
| 24.04.2019, 15:08 [ТС] | ||
|
Пока есть 10 функций - угодил. когда будет приближаться к 50? еще одно приложение для тех кто не поместился? а если 500? представляю инструкцию "...откройте приложение №76...". TabControl штука хорошая в пределах одной бизнес-функции, когда надо завести справочник далеко не отходя от документов и прочие сопутствующие действия. Прошу под спойлер:
0
|
||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
||
| 24.04.2019, 15:25 | ||
|
То что на скриншотах совершенно разные формы или я Вас не понимаю.
0
|
||
|
1 / 1 / 0
Регистрация: 14.09.2018
Сообщений: 40
|
|||
| 24.04.2019, 16:05 [ТС] | |||
|
Не думаю что это велосипед ГНИВЦа, скорее всего этот фреймворк/технология/какеготам имеет название и вполне возможно какое-никакое описание, хотелось бы выяснить что это и как этим пользоваться
0
|
|||
| 24.04.2019, 16:05 | |
|
Помогаю со студенческими работами здесь
20
Ссылка на объект не указывает на экземпляр объекта Ссылка на объект не указывает на экземпляр объекта Ссылка на объект не указывает на экземпляр класса Ссылка на объект не указывает на экземпляр объекта Ссылка на объект не указывает на экземпляр объекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|