Вызовите метод UserControl с его родительской страницы - PullRequest
3 голосов
/ 16 июня 2011

Я получил такой подход для вызова метода Parent Page из пользовательского элемента управления. Эта функция «DisplayMessage» просто принимает сообщение о строковой переменной и отображает его на экране. В пользовательский элемент управления я поместил текстовое поле и кнопку. Для события click для кнопки я вызываю метод родительской страницы, который мы обсуждали выше, используя Reflection и передаю значение текстового поля методу, а затем метод вызывается, и сообщение отображается на экране.

Родительская страница:

public void DisplayMessage(string message)
{
   Response.Write(message);
}

Контроль пользователя:

protected void btnSend_Click(object sender, EventArgs e)
{
    this.Page.GetType().InvokeMember("DisplayMessage",System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { txtMessage.Text });
}

У меня отлично работает.

Теперь мне нужно вызвать метод, который существует в UserControl, с его родительской страницы.

Пожалуйста, предложите мне. Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 16 июня 2011

Независимо от того, что вы устанавливаете атрибут ID="", когда вы помещаете элемент управления на страницу, это имя переменной, которую вы можете использовать для ссылки на нее изнутри страницы.

Итак, если ваша страница выглядит так:

<my:UserControl runat="server" ID="myControl" />

Тогда вы можете просто сделать:

myControl.MyControlMethod()

Метод, который вызывается в пользовательском элементе управления из родительского элемента, должен быть общедоступным. Если он закрытый или защищенный, метод не может быть вызван из родительского.

Кроме того, вместо того, чтобы вызывать функции страницы с помощью отражения, вам лучше использовать события .

0 голосов
/ 16 июля 2016

Я думаю, я нашел самый самый простой способ сделать это

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

this.animationControl = new VideoEditor.AnimationControl(this);

И в конструкторе пользовательского управления сохраните ссылку родительской формы в локальной переменной

public AnimationControl(Form1 form)
{
        _form1 = form;
        // other initialization stuff
}

Теперь получите доступ к чему угодно из родительского класса через эту локальную переменную '_form1'

Пример

_form1.MessageFromAnimationControl(choosenAnim);

доступ к родительской переменной / методам в child или отправка дочерних переменных в parent.

Надеюсь, это кому-нибудь поможет:)

0 голосов
/ 16 июня 2011

this.Page даст вам ссылку на объект страницы.

Если вы реализуете DisplayMessage на базовой странице, а затем наследуете от него.

Вы можете привести это .Page к BasePage, а затем вызвать метод следующим образом:)

if(this.Page is BasePage)
{
   BasePage bs = this.Page as BasePage

   bs.DisplayMessage(....)   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...