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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование контрола 
:(
    Опции темы
klein
Дата 14.4.2011, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день. Вот практикуюсь с наследованием. Столкнулся с проблемой.
Хочу добавить функционал стандартному контролу (пускай будет comboBox). Чтобы не создавать новый контрол поступил так : создаю клас
Код

class MyComboBox : ComboBox
{
     public int MyNewField;
     public void MyNewFunktion()
     {
     }
}
 
На форму перетаскиваю стандартный comboBox1.

Код

comboBox1 = new MyComboBox(); // сам не ожидал, но все впорядке 
comboBox1.MyNewFunktion(); // Облом 
comboBox1.MyNewField; // Тоже самое


Понимаю что вопрос чепуховский, но чтото не разберусь. На практике никогда не использовал, вот решил для себя попробовать. Всем спасибо.

Это сообщение отредактировал(а) klein - 14.4.2011, 15:41
PM MAIL   Вверх
Экскалупатор
Дата 14.4.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



во первых откуда там взяться тем методам? для CLR это обычный ComboBox. варианты решения:
1. сделать таки нормальный экземпляр класса
MyComboBox comboBox1 = new MyComboBox();

2. привести к нужному типу, к примеру так:
(comboBox1 as MyComboBox).MyNewFunktion();

а вообще полезно почитать про наследование.
PM MAIL ICQ   Вверх
Gluttton
Дата 14.4.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

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



Цитата(klein @  14.4.2011,  15:31 Найти цитируемый пост)
Облом 

Прямо так и пишет?


--------------------
Слава Україні!
PM MAIL   Вверх
Экскалупатор
Дата 14.4.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(Gluttton @  14.4.2011,  14:50 Найти цитируемый пост)
Цитата(klein @  14.4.2011,  15:31 Найти цитируемый пост)
Облом 

Прямо так и пишет? 

скорее всего да. а еще добавляет "отлезь, а то в ментовку сдам!"
PM MAIL ICQ   Вверх
Gluttton
Дата 14.4.2011, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

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



Экскалупатор, я это к тому, что очень часто (хоть и не всегда) по сообщению компилятора об ошибке можно понять в чем проблема.
А "облом", не наталкивает на мысли.


--------------------
Слава Україні!
PM MAIL   Вверх
klein
Дата 14.4.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Экскалупатор :
1. Такой вариант я умысленно обошол в связи з последующим "ручным хардкодом" размещения контрола на форме. Или есть какойнибуть готовый прием размешения унаследованого контрола на форме?
2.  smile   то что хотел, но 
Код

class MyComboBox : ComboBox
{
     public int MyNewField  = 123;
     public void MyNewFunktion()
     {
          this.Items.Add("tra ta ta");
     }
}

comboBox1 = new MyComboBox();  // без этой строчки приведение не работает
(comboBox1 as MyComboBox).MyNewFunktion();  //  компилирует, запускает но не функционирует
Text = (comboBox1 as MyComboBox)MyNewField.ToString(); // работает, но компилятор выдает предупреждение о marshal-by-reference опасности


Можно ли чтото сделать чтобы не нужно било каждый раз обращаться через приведения ? Чтото типа такого:
Код

MyComboBox MCB = new MyComboBox();
comboBox1 = MCB; //И с этого момента  
comboBox1.MyNewFunktion();


Читать полезно  smile . И практиковаться тоже. 

Gluttton:   smile  нет, пишет "остань противный не буду я это делать без пре....образования"

Жирным пометил новые вопросы, чтобы выделить из всей масы. Не подумайте что кричу  smile . Когда мне пишут на капслоке или жирным шрифтом кажется что поднимают голос  smile , ни у кого такого нет ?

PM MAIL   Вверх
Экскалупатор
Дата 14.4.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



как добаыить свой контрол в toolbox


(comboBox1 as MyComboBox).MyNewFunktion();  //  компилирует, запускает но не функционирует
почему не функционирует? у тебя же код пустой там, судя по первому посту.
Цитата(klein @  14.4.2011,  15:58 Найти цитируемый пост)
comboBox1 = new MyComboBox();  // без этой строчки приведение не работает

я бы посоветовал разобраться что происходит в этой строке, что бы понять почему без нее не работает.
Цитата(klein @  14.4.2011,  15:58 Найти цитируемый пост)
MyComboBox MCB = new MyComboBox();
comboBox1 = MCB; //И с этого момента  
comboBox1.MyNewFunktion();

жуткая каша, это работать не будет, потому что comboBox1 в твоем случае это екземпляр не MyComboBox, а просто ComboBox. опять же на лицо не хватка знаний(или непонимание). оставь только первую строку и все будет ок. обращаться соответственно MCB.MyNewFunktion();
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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