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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструктор кастом контрола с параметром 
:(
    Опции темы
HalkaR
Дата 14.6.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Есть свой контрол. У него есть конструктор, принимающий параметр. Проблема в том, что дизайнер периодически выкидывает этот параметр.

Что делать? Как инициализировать контрол в InitializeComponent? Пробовал выносить инициализацию в конструктор формы, но тогда ругается дизайнер форм.
Спасибо! 
PM MAIL   Вверх
Дрон
Дата 14.6.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(HalkaR @  14.6.2006,  14:50 Найти цитируемый пост)
Есть свой контрол. У него есть конструктор, принимающий параметр.

ТАК НЕЛЬЗЯ!!!  smile 

Серьёзно. Не надо так делать. Обойдись без этого конструктора.

Сделай какой-нибудь метод, инициализирующий твой контрол и вот его уже запихни в конструктор или даже в Load формы.

Да и зачем вообще это нужно? Можно более поконкретней ситуацию обрисовать?  

Это сообщение отредактировал(а) Дрон - 14.6.2006, 14:04


--------------------
Да. Именно так.
PM   Вверх
HalkaR
  Дата 14.6.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Цитата(Дрон @ 14.6.2006,  13:59)
Цитата(HalkaR @  14.6.2006,  14:50 Найти цитируемый пост)
Есть свой контрол. У него есть конструктор, принимающий параметр.

ТАК НЕЛЬЗЯ!!!  smile 

А почему? Рискую показаться ламером, но почему?

Чем это хуже?

Код

this.cmsListFiles = new System.Windows.Forms.ContextMenuStrip(this.components);
 
PM MAIL   Вверх
mr.DUDA
Дата 14.6.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



На самом деле, нужно сделать 2 конструктора - с параметром и без, и в самом начале твоего конструктора вызывать дефолтный. Тогда и волки будут сыты (дизайнер), и овцы целы (конструктор). 


--------------------
user posted image
PM MAIL WWW   Вверх
Дрон
Дата 14.6.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(HalkaR @  14.6.2006,  15:20 Найти цитируемый пост)
Чем это хуже?

Хмм... Любопытно.

У меня на работе .NET 2.0 не установлен, но дома я обязательно посмотрю как это сделано. Либо там используется какой-то атрибут, либо как-то переопределён дизайнер.


Цитата(HalkaR @  14.6.2006,  15:20 Найти цитируемый пост)
А почему?

А как в общем случае ты определишь, что за параметры должны туда передаваться? 


--------------------
Да. Именно так.
PM   Вверх
HalkaR
Дата 14.6.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Вобщем у себя я исправил, сделал конструктор без параметра. Но вопрос остался. 
PM MAIL   Вверх
Дрон
  Дата 15.6.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Уфф... После нескольких часов исследования MSDN и кода фрэймворка при помощи рефлектора выдал следующую шнягу (написана под 1.1, но должна без проблем работать и в 2.0)

Короче, при помощи пары атрибутов мы получаем возможность использовать конструктор с параметрами и в дизайнере. Проблемы две:
1) конструктор без параметров всё-таки нужен. Он будет вызываться в design-time. А вот в run-time будет вызываться конструктор с параметрами
2) поскольку это никому не нужный пример, то я не особо заморачиваясь сделал предположение, что как параметры в конструктор будут передаваться поля класса имеющие те же имена, что и формальные параметры.

Класс ParameterSerializer в аттаче. Там же пример кастом контрола, использующего этот класс. 
Для компиляции в references надо добавить System.Design.

Код предоставляется AS IS и как говорится Don't Try This At Home! smile
В .NET можно всё, но по-моему лучше обходиться без таких фокусов.

PS: Обожаю копаться во внутренностях фрэймворка...  

Это сообщение отредактировал(а) Дрон - 15.6.2006, 00:58

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  Parameters.zip 2,43 Kb


--------------------
Да. Именно так.
PM   Вверх
mr.DUDA
Дата 15.6.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Дрон,  smile 

Вот за что я не люблю design-time... 


--------------------
user posted image
PM MAIL WWW   Вверх
Дрон
Дата 15.6.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(mr.DUDA @  15.6.2006,  11:40 Найти цитируемый пост)
Вот за что я не люблю design-time...  

Аналогично smile 


--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 15.6.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Дрон, ужас  smile 
Следуя принципу инкапсуляции, я запихнул все методы обновленя DataSet внутрь его самого. Все работает, все хорошо. Но мне понадобилось изменять место, откуда читаются данные. Решил передать расположение данных в конструкторе. 
После этого наткнулся на вышеописанные грабли  smile 
Вопрос: Что посоветуете, заниматься гемором (см. выше) либо положить на инкапсуляцию и заполнять датасет извне, либо сделать в датасете поле, в которое передавать путь?
 smile  smile  smile  
PM MAIL WWW ICQ   Вверх
Дрон
Дата 15.6.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(ivashkanet @  15.6.2006,  13:36 Найти цитируемый пост)
Что посоветуете

Сделать поле с путём или лучше метод вроде LoadData(string path), который будешь вызывать сам. 


--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 15.6.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Дрон @  15.6.2006,  12:43 Найти цитируемый пост)
 LoadData(string path)

Это в принципе так, но мой DataSet постоянно обновляется в RealTime (в другом потоке).
Так что лучше, ИМХО
Цитата(Дрон @  15.6.2006,  12:43 Найти цитируемый пост)
 поле с путём

Спасибо 
PM MAIL WWW ICQ   Вверх
ivashkanet
Дата 15.6.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Дрон @  15.6.2006,  12:43 Найти цитируемый пост)
 поле с путём

Сразу после создания объекта запускаются слушатели определенного пути. Этот путь должен браться из поля. Но, получается, слушатели запускаются раньше (при создании объекта), чем я передам правильные пути в параметре  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile

Добавлено @ 13:29 
Может сделать метод Start() у Датаеста??? 

Это сообщение отредактировал(а) ivashkanet - 15.6.2006, 13:28
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 15.6.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ivashkanet, вынеси из датасета всё что напрямую к датасету не относится. Имею ввиду логику по зачитке данных. 


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 15.6.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



mr.DUDA, так и сделал  smile  
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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