Открытые методы внутри пользовательского контроля c # .net - PullRequest
1 голос
/ 02 марта 2009

Как вызвать открытый метод пользовательского элемента управления на странице?

Я загружаю элемент управления динамически внутри OnInit на странице. Есть идеи? По какой-то причине я получаю ошибку сборки, которая говорит о том, что метод не существует, даже если он публичный. Начинаю думать, что пользовательские элементы управления не стоят всех хлопот.

Ответы [ 5 ]

5 голосов
/ 02 марта 2009

Вы сказали

Control fracTemplateCtrl = 
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

нужно сказать

FracTemplateCtrl fracTemplateCtrl =
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

Обратите внимание, что fracTemplateCtrl is объявлен как FracTemplateCtrl, поэтому Visual Studio знает, что у него есть TestMethod(). Когда он объявлен как Control, Visual Studio не может сделать это предположение.

1 голос
/ 02 марта 2009

Без примера кода трудно сказать наверняка, но я предполагаю, что вам нужно привести свою ссылку на UserControl к конкретному типу вашего пользовательского элемента управления. Например, если ваш UserControl имеет тип «PersonControl», то ваш код будет выглядеть примерно так:

PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
1 голос
/ 02 марта 2009

Вы переводите пользовательский элемент управления на правильный тип?

0 голосов
/ 02 марта 2009

Ответ Майка - как это сделать, но Visual Studio может быть немного сомнительным в обнаружении класса UserControl и жаловаться, что тип не существует. В этих ситуациях мне нужно добавить тег <% @Reference %> на странице, чтобы заставить его распознавать, даже если на него можно ссылаться в web.config.

0 голосов
/ 02 марта 2009

Если ваш класс наследует от UserControl, убедитесь, что когда вы обращаетесь к нему, как говорили другие, вы используете его правильно. Например:

public MyControl : UserControl
{
    public void MyMethod(){...}
}

в вашей форме:

private MyControl mycontrol = new MyControl();
private void MainForm()
{
    this.Controls.Add(mycontrol);

    InitializeComponent();
}

private void DoStuff()
{
    ((MyControl)mycontrol).MyMethod();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...