Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Преобразование типов  [new]
vah
Member

Откуда:
Сообщений: 2567
Скажите пожалуйста,
как можно преобразовать пользовательскую форму
group.Owner.Parent.FindForm()

к типу
Form
?

Заранее благодарен.
16 май 18, 13:42    [21413370]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2779
vah,

это называется приведение к базовому типу
var form = (Form)group.Owner.Parent.FindForm()
16 май 18, 14:10    [21413497]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
vah
Member

Откуда:
Сообщений: 2567
Roman Mejtes,

не помогает
((Form)group.Owner.Parent).GetType().Name

возвращает не
Form
, а название объекта формы, которую я создал.
16 май 18, 14:16    [21413516]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2779
vah,

object.GetType() всегда возвращает реальный тип объекта, ничего удивительного в этом нет.
что вы хотите сделать, напишите нормально, мы тут не экстрасенсы
16 май 18, 14:20    [21413524]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
vah
Member

Откуда:
Сообщений: 2567
Roman Mejtes,

Мне надо реализовать такую штуковину, а
Form
все портит.
 foreach (var v in _queue)
            {
                switch (v.GetType().Name)
                {
                    case "LayoutControlItem":
                        break;
                    case "Button":
                        break;
                    case "XtraTabPage":

                        break;
                    case "LayoutControlGroup":

                        break;
                    default:
                        break;
                }
16 май 18, 14:28    [21413557]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
vah
Member

Откуда:
Сообщений: 2567
Roman Mejtes,

в смысле такую

foreach (var v in _queue)
            {
                switch (v.GetType().Name)
                {
                    case "Form":
                        break;
                    case "LayoutControlItem":
                        break;
                    case "Button":
                        break;
                    case "XtraTabPage":

                        break;
                    case "LayoutControlGroup":

                        break;
                    default:
                        break;
                }
16 май 18, 14:29    [21413569]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 132
vah
Roman Mejtes,

Подозреваю, что это надо реализовать иначе:
foreach (var v in _queue)
  if (v is Form)
  {
    // что-то делаем с Form
  }
  else if (v is LayoutControlItem)
  {
    // что-то делаем с LayoutControlItem
  }
  else if (v is Button)
  {
    // что-то делаем с Button
  }
  else if (v is XtraTabPage)
  {
    // что-то делаем с XtraTabPage
  }
  else if (v is LayoutControlGroup)
  {
    // что-то делаем с LayoutControlGroup
  }
  else
  {
    // что-то делаем с экземплярами прочих типов
  }
16 май 18, 14:41    [21413625]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 18647
                switch (v)
                {
                    case Form form:
                        form.Caption="ddd";
                        break;
                    case LayoutControlItem item:
                        break;
                    case Button button:
                        button.Left = 5;
                        break;
                    default:
                        break;
                }
16 май 18, 14:44    [21413650]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2779
vah
Roman Mejtes,

в смысле такую

foreach (var v in _queue)
            {
                switch (v.GetType().Name)
                {
                    case "Form":
                        break;
                    case "LayoutControlItem":
                        break;
                    case "Button":
                        break;
                    case "XtraTabPage":

                        break;
                    case "LayoutControlGroup":

                        break;
                    default:
                        break;
                }

то есть, если имя типа изменится, вся логика вашей программы пойдет по .... и найти причину может быть не очень просто.
Советую в каждом switch, где вариант default не определен возбуждать исключение ArgumentOutOfRangeException.

2_Shocker.Pro: фигасе, это из 6/7 версии или так всегда было? 1 раз такое вижу :)
16 май 18, 14:49    [21413683]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 18647
Roman Mejtes
2_Shocker.Pro: фигасе, это из 6/7 версии или так всегда было? 1 раз такое вижу :)
В 7-й версии появилось. Странно, что ты не знаешь, ибо необычайно удобно в WPF, так как там очень часть приходится иметь дело с типом object
16 май 18, 14:53    [21413700]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 18647
Shocker.Pro
Roman Mejtes
2_Shocker.Pro: фигасе, это из 6/7 версии или так всегда было? 1 раз такое вижу :)
В 7-й версии появилось. Странно, что ты не знаешь, ибо необычайно удобно в WPF, так как там очень часть приходится иметь дело с типом object
Еще можно так
if (obj is ClassA cla && cla.MyProp is ClassB clb)
  clb.Name="dd"; 
16 май 18, 14:54    [21413708]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 18647
Shocker.Pro
В 7-й версии появилось.
а еще можно в switch добавлять дополнительные условия через when, то есть фактически switch теперь полноценно заменяет каскад if-ов
16 май 18, 14:57    [21413722]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2779
Shocker.Pro,

я уже давно не работаю с WPF

Теперь знаю, давно хотел эту конструкцию
16 май 18, 15:05    [21413780]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 3919
Roman Mejtes
Shocker.Pro,

я уже давно не работаю с WPF

Теперь знаю, давно хотел эту конструкцию

А причем здесь WPF? Это базовая конструкция языка 7-й версии, называется pattern matching: https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
16 май 18, 16:59    [21414329]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 18647
Сон Веры Павловны
А причем здесь WPF?
Shocker.Pro
ибо необычайно удобно в WPF, так как там очень часть приходится иметь дело с типом object
16 май 18, 17:11    [21414372]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить