powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Передать тип контрола в метод.
9 сообщений из 9, страница 1 из 1
Передать тип контрола в метод.
    #39502560
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахожу контрол.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 private Control FindControlByTag(Control container, string tag)
 {
     foreach (Control ctrl in container.Controls)
     {
         if (ctrl is TextBox)
        {
             if (ctrl.Tag.ToString() == tag)
              {
                   return ctrl;
              } 
       }

    }

   return null;
}


Но я хочу if (ctrl is TextBox) сделать генерик - if (ctrl is ControlType). Что я должен передать в метод?
Код: c#
1.
private Control FindControlByTag(Control container, ??? ControlType,  string tag)
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502583
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так что ли?

Код: c#
1.
private Control FindControlByTag<T>(Control container, T ControlType,  string tag)
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502588
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя чего это я, второй параметр вообще не нужен

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 private Control FindControlByTag<T>(Control container, string tag)
 {
     foreach (Control ctrl in container.Controls)
     {
         if (ctrl is T)
        {
             if (ctrl.Tag.ToString() == tag)
              {
                   return ctrl;
              } 
       }

    }

   return null;
}
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502591
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyтак что ли?

Код: c#
1.
private Control FindControlByTag<T>(Control container, T ControlType,  string tag)


так не ругается
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private Control FindControlByTag<T>(Control container, T ContType, int tag)
        {
            foreach (Control ctrl in container.Controls)
            {
                if (ctrl is T)
                {
                    if (ctrl.Tag.ToString() == tag.ToString())
                    {
                        return ctrl;
                    }
                }

            }
            return null;
        }


но как передать в функцию? так ругается
Код: c#
1.
cont = FindControlByTag<TextBox>(container, TextBox, (int)ctrl1.Tag);
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502592
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде еще можно как-то ограничить <T>, чтобы функция ругалась на попытку передать в нее тип, не наследующий Control
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502595
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7но как передать в функцию? так ругаетсясмотри вариант без второго параметра.
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502603
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyjenya7но как передать в функцию? так ругаетсясмотри вариант без второго параметра.
да так не ругается. спасибо.
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502670
Roman 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
    public static class WinFormsExtension
    {
        public static Control FindControlByTag<T>(
            this Control container, 
            string tag, 
            StringComparison strcomp = StringComparison.InvariantCulture) 
            where T : Control
        {
            foreach (Control ctrl in container.Controls)
            {
                if (ctrl is T)
                {
                    if (string.Equals(ctrl.Tag.ToString(), tag, strcomp))
                    {
                        return ctrl;
                    }
                }

            }
            return null;
        }

        public static Control FindControlByTagRecursive<T>(
            this Control container,
            string tag,
            StringComparison strcomp = StringComparison.InvariantCulture)
            where T : Control
        {
            foreach (Control ctrl in container.Controls)
            {
                if (ctrl is T)
                {
                    if (string.Equals(ctrl.Tag?.ToString(), tag, strcomp))
                    {
                        return ctrl;
                    }
                }

                if (ctrl.Controls.Count > 0)
                {
                    var recResult = ctrl.FindControlByTagRecursive<T>(tag, strcomp);
                    if (recResult != null) return recResult;
                }

            }
            return null;
        }
    }


с рекурсией и без
...
Рейтинг: 0 / 0
Передать тип контрола в метод.
    #39502735
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Передать тип контрола в метод.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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