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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание переменной разных типов от условия, преобразование типа 
V
    Опции темы
U237
Дата 27.11.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возникла вот такая проблема.
Метод занимается динамическим созданием меню и через рекурсию хочется создать подменю. 
Код

private void CreatMenu(XmlNode node, Menu myMenu)

Собственно код создания идентичен, но если это подменю то второй параметр должен иметь тип MenuItem.
Я пытался в качестве второго параметра передать обьект object myObj. 
А в коде определить какой у него тип и преобразовать именно к этому типу.
Код

if (null != myObj as Menu) 
       Menu myMenu2 = (Menu)myObj;
else
       MenuItem myMenu2 = (MenuItem)myObj;                


Пока все нормально, но как только я хочу использовать myMenu2 VS выдает ошибку "Cannot resolve symbol ...".

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


Шустрый
*


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

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



Цитата(U237 @ 27.11.2008,  14:03)
myMenu2 VS выдает ошибку "Cannot resolve symbol ...".
Ну так myMenu2 определяется внутри блока if else. Вот снаружи его и не видно.
Кстати и Menu и MenuItem наследуются от ItemsControl, так что в теории можно обойтись без приведения типов.
PM MAIL ICQ   Вверх
Partizan
Дата 27.11.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



Цитата

Код

if (null != myObj as Menu) 



Эта конструкция заменяется на более красивое

Код

if (myObj is Menu) 



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
U237
Дата 28.11.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем спасибо!
Пришлось выполнять проверку и приведение типов два раза.
Код

 if (myObj is Menu){
   Menu myMenu2 = (Menu) myObj;
   myMenu2.Items.Add(new Separator());
}else{
   MenuItem myMenu2 = (MenuItem)myObj;
   myMenu2.Items.Add(new Separator());
}
//...
if (myObj is Menu)
{
   Menu myMenu2 = (Menu)myObj;
   myMenu2.Items.Add(myMenu);
}else{
   MenuItem myMenu2 = (MenuItem)myObj;
   myMenu2.Items.Add(myMenu);
}

Не красиво зато работает. Я понимаю что разделитель в основном меню это нереально но тут важен сам принцип.
PM MAIL   Вверх
Partizan
Дата 28.11.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



U237, 

Код

 if (myObj is ItemsControl){
   ItemsControl myMenu2 = (ItemsControl) myObj;
   myMenu2.Items.Add(new Separator());
}


Добавлено @ 17:54
U237, зачем нужны проверка и приведение 2 раза - тоже не понятно...

Это сообщение отредактировал(а) Partizan - 28.11.2008, 17:55


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
U237
Дата 30.11.2008, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Между двумя проверками есть код да и проверка выполняется в разных ветках кода.
В первом случае мы добавляем разделитель во втором подменю и то и другое может быть и в основном меню (Menu) и  в подменю (MenuItem). Вариант с  (ItemsControl) у меня не сработал, названия меню не отображаются.
Конечно это можно сделать немного красивей например так:
Код

if (myObj is Menu)
   ((Menu)myObj).Items.Add(new Separator())
else
   ((MenuItem)myObj).Items.Add(new Separator());


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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