Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразование типов / 15 сообщений из 15, страница 1 из 1
16.05.2018, 13:42
    #39645492
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Скажите пожалуйста,
как можно преобразовать пользовательскую форму
Код: c#
1.
group.Owner.Parent.FindForm()


к типу
Код: c#
1.
Form

?

Заранее благодарен.
...
Рейтинг: 0 / 0
16.05.2018, 14:10
    #39645512
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
vah,

это называется приведение к базовому типу
Код: c#
1.
var form = (Form)group.Owner.Parent.FindForm()
...
Рейтинг: 0 / 0
16.05.2018, 14:16
    #39645520
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Roman Mejtes,

не помогает
Код: c#
1.
((Form)group.Owner.Parent).GetType().Name


возвращает не
Код: c#
1.
Form

, а название объекта формы, которую я создал.
...
Рейтинг: 0 / 0
16.05.2018, 14:20
    #39645521
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
vah,

object.GetType() всегда возвращает реальный тип объекта, ничего удивительного в этом нет.
что вы хотите сделать, напишите нормально, мы тут не экстрасенсы
...
Рейтинг: 0 / 0
16.05.2018, 14:28
    #39645525
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Roman Mejtes,

Мне надо реализовать такую штуковину, а
Код: c#
1.
Form

все портит.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 foreach (var v in _queue)
            {
                switch (v.GetType().Name)
                {
                    case "LayoutControlItem":
                        break;
                    case "Button":
                        break;
                    case "XtraTabPage":

                        break;
                    case "LayoutControlGroup":

                        break;
                    default:
                        break;
                }
...
Рейтинг: 0 / 0
16.05.2018, 14:29
    #39645532
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Roman Mejtes,

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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;
                }
...
Рейтинг: 0 / 0
16.05.2018, 14:41
    #39645541
stomsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
vahRoman Mejtes,
Подозреваю, что это надо реализовать иначе:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
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
  {
    // что-то делаем с экземплярами прочих типов
  }
...
Рейтинг: 0 / 0
16.05.2018, 14:44
    #39645545
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                switch (v)
                {
                    case Form form:
                        form.Caption="ddd";
                        break;
                    case LayoutControlItem item:
                        break;
                    case Button button:
                        button.Left = 5;
                        break;
                    default:
                        break;
                }
...
Рейтинг: 0 / 0
16.05.2018, 14:49
    #39645552
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
vahRoman Mejtes,

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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 раз такое вижу :)
...
Рейтинг: 0 / 0
16.05.2018, 14:53
    #39645554
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Roman Mejtes2_Shocker.Pro: фигасе, это из 6/7 версии или так всегда было? 1 раз такое вижу :)В 7-й версии появилось. Странно, что ты не знаешь, ибо необычайно удобно в WPF, так как там очень часть приходится иметь дело с типом object
...
Рейтинг: 0 / 0
16.05.2018, 14:54
    #39645555
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Shocker.ProRoman Mejtes2_Shocker.Pro: фигасе, это из 6/7 версии или так всегда было? 1 раз такое вижу :)В 7-й версии появилось. Странно, что ты не знаешь, ибо необычайно удобно в WPF, так как там очень часть приходится иметь дело с типом objectЕще можно так
Код: c#
1.
2.
if (obj is ClassA cla && cla.MyProp is ClassB clb)
  clb.Name="dd"; 
...
Рейтинг: 0 / 0
16.05.2018, 14:57
    #39645558
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Shocker.ProВ 7-й версии появилось.а еще можно в switch добавлять дополнительные условия через when, то есть фактически switch теперь полноценно заменяет каскад if-ов
...
Рейтинг: 0 / 0
16.05.2018, 15:05
    #39645577
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Shocker.Pro,

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

Теперь знаю, давно хотел эту конструкцию
...
Рейтинг: 0 / 0
16.05.2018, 16:59
    #39645671
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Roman MejtesShocker.Pro,

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

Теперь знаю, давно хотел эту конструкцию
А причем здесь WPF? Это базовая конструкция языка 7-й версии, называется pattern matching: https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
...
Рейтинг: 0 / 0
16.05.2018, 17:11
    #39645682
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Сон Веры ПавловныА причем здесь WPF?Shocker.Proибо необычайно удобно в WPF, так как там очень часть приходится иметь дело с типом object
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразование типов / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]