c # имя или тип не найден - PullRequest
       10

c # имя или тип не найден

1 голос
/ 02 декабря 2009
    private void changeFont()
    {
        Control.ControlCollection controls = tabControl1.Controls;
        foreach (Control control in controls)
        {
            TabPage t = (TabPage)control;
            Control c = t.GetChildAtPoint(new Point(250, 250));
            System.Type type = typeof(c);  //-->1st error
            ((type)c).changeFont(fontModifier); //-->2nd error
        }
    }

Ошибка 1 Не удалось найти тип или имя пространства имен 'c' (отсутствует директива using или ссылка на сборку?) Ошибка 2 Не удалось найти имя типа или пространства имен «тип» (отсутствует директива using или ссылка на сборку?)

Что с этим не так? Просто для контекста, я пытаюсь пройти через tabcontrol, и на каждой вкладке у нас есть пользовательский элемент управления, поэтому getChildAtPoint именно эта позиция. Во всех пользовательских элементах управления у нас есть функция changefont, которая будет изменять размер шрифта определенных элементов управления ....

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 02 декабря 2009

Чтобы получить фактический тип объекта, вместо typeof , который получает тип для имени типа (как в typeof(string)), вам нужно использовать c.GetType () , который получает фактический тип объекта, на который указывает c.

Что касается (type)c, вы не можете этого сделать: приведение типов работает только с использованием определенного имени типа. Если вам нужно вызывать метод changeFont только в элементах управления, которые являются производными от вашего пользовательского типа, или производными от них, вы должны выполнить:

if(typeof(MyControlType).IsAssignableFrom(c.GetType()) {
    ((MyControlType)c).changeFont(fontModifier);
}

Или еще проще:

var myControl = c as MyControlType;
if(myControl != null) {
    myControl.changeFont(fontModifier);
}
0 голосов
/ 02 декабря 2009

если все пользовательские элементы управления имеют функцию changeFont, я предполагаю реализацию класса / интерфейса.

private void changeFont()
{
    Control.ControlCollection controls = tabControl1.Controls;
    foreach (Control control in controls)
    {
        TabPage t = (TabPage)control;
        Control c = t.GetChildAtPoint(new Point(250, 250));
        if (c is <your class>)
        {
            (<yourclass>)c.changeFont(fontModifier);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...