Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наследование форм и дизайнер в Visual Studio 
V
    Опции темы
IGV
Дата 29.10.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



IDE - Visual Studio 2008 Pro sp1 9.0.30729.1

У меня есть переменные, которые одинаковы для всех форм и они инициализируются в конструкторе (в частности это ToolStripLabel главной mdi формы приложения).

Я создал абстрактный класс BaseForm  и унаследовал его от формы
Код

public abstract class BaseForm : Form
{
     protected readonly ToolStripLabel _statusLabel;

     protected BaseForm(ToolStripLabel statusLabel)
     {
           _statusLabel = statusLabel;
     }
}


Теперь я создаю новую форму и наследую её от BaseForm и хочу модифицировать её дизайн через дизайнер форм. Но он открывается с ошибкой - заявляет о том, что не может найти конструктор для BaseForm. Как решить эту проблему?


Это сообщение отредактировал(а) IGV - 29.10.2009, 15:28
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Дизайнер не принимает параметрических конструкторов.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
IGV
Дата 29.10.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



diadiavova, 
не понял, поясни.
Ведь если я напишу параметризованный конструктор для формы, она же всё равно будет отображаться в дизайнере.
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(IGV @  29.10.2009,  15:44 Найти цитируемый пост)
не понял, поясни.
Ведь если я напишу параметризованный конструктор для формы, она же всё равно будет отображаться в дизайнере. 
Да, но это благодаря тому, что в ней помимо параметризированного есть ещё и обычный(без параметров). Дизайнер ищет пустой конструктор и его и вызывает. Если в обычной форме ты определишь параметризированный конструктор, то он всё равно не будет вызван и всё что ты в нём сделаешь будет прогнорировано. Если, конечно, ты не вызовешь этот конструктор из непараметризированного с дефолтными аргументами.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
IGV
Дата 29.10.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



Секундочку, я думал, что в C#, если не указан конструктор, то по умолчанию создается конструктор без параметров, а если задан хотя бы один параметризованный конструктор, то конструктор по умолчанию не создается. Таким образом, если я определяю параметризованный конструктор формы, то не параметризованного уже нет. Разве не так?

Даже, если я добавляю в форму не параметризованный конструктор (в оба класса и в базовый и в дочерний), то все равно ошибка сохраняется.


P.S. я думал, что дизайнер формы вообще не вызывает конструкторы, а вызывает InitializeComponent ?

Это сообщение отредактировал(а) IGV - 29.10.2009, 16:20
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(IGV @  29.10.2009,  16:19 Найти цитируемый пост)
Секундочку, я думал, что в C#, если не указан конструктор, то по умолчанию создается конструктор без параметров, а если задан хотя бы один параметризованный конструктор, то конструктор по умолчанию не создается. Таким образом, если я определяю параметризованный конструктор формы, то не параметризованного уже нет. Разве не так?
Всё так, но для форм там есть нюанс. Точнеее не для форм, а для тех форм, код которых генерится в дизайнере. Если не создавать для такой формы непараметризированный конструктор, то он всё-равно будет туда вставлен. Метод InitializeComponents вызывается из него.


Цитата(IGV @  29.10.2009,  16:19 Найти цитируемый пост)
Даже, если я добавляю в форму не параметризованный конструктор (в оба класса и в базовый и в дочерний), то все равно ошибка сохраняется. 

А ты после вставки проект построил?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
IGV
Дата 29.10.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



теперь другая ошибка - он хочет, чтобы родительский класс был не абстрактным. Как этого избежать?

Добавлено через 2 минуты и 35 секунд
а то не очень хочется, чтобы можно было создавать экземпляры родительского класса

Добавлено через 4 минуты и 20 секунд
всё понял, делаю не абстрактным....туплю

тему считаю исчерпанной. Спасибо.

Это сообщение отредактировал(а) IGV - 29.10.2009, 16:27
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



IGV, я попробовал и у меня ругается на то, что базовый ти - абстрактный. Убрал модификатор - всё заработало.

Добавлено через 1 минуту и 12 секунд
Вот взгляни.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  CaptionForm.rar 32,87 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
IGV
Дата 29.10.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



спасибо, что напрягся и сделал example
я решил свою проблему просто сделал конструкторы protected
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(IGV @  29.10.2009,  17:01 Найти цитируемый пост)
я решил свою проблему просто сделал конструкторы protected 
А раньше они какими были? smile 



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
IGV
Дата 29.10.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



что вызывает такое удивление?

в базовой форме конструктор был public
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Удивление вызывает то, что в первом посте в коде он был именно протектед.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.