从父页面调用UserControl方法

3
我有一个如下的方法来调用父页面中的方法。这个“DisplayMessage”函数接受一个字符串变量消息并在屏幕上显示它。在用户控件中,我放置了一个文本框和一个按钮。在按钮的单击事件中,我使用反射调用了我们上面讨论过的父页面方法,并将文本框的值传递给该方法,然后调用该方法并在屏幕上显示消息。
父页面:
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 });
}

对我来说,它运行得很好。

现在我需要做的是,从父页面中调用存在于用户控件中的方法。

请给我建议。提前感谢。

3个回答

6

无论您在将控件放置在页面上时将ID = ""属性设置为什么,都是您可以在页面内引用它的变量名称。

因此,如果您的页面如下所示:

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

然后你只需要执行:

myControl.MyControlMethod()

用户控件中从父控件调用的方法必须是公共的。如果是私有的或受保护的,则无法从父控件调用该方法。
此外,与其通过反射调用页面函数,不如使用事件更好。

0

这个页面将为您提供页面对象的参考。

如果您在基础页面中实现了DisplayMessage,然后从那个页面继承。

您可以将this.Page强制转换为BasePage,然后以这种方式调用该方法:)

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

   bs.DisplayMessage(....)   
}

0

我想我找到了最简单的方法来做到这一点。

只需在用户控件的构造函数中传递父级的引用即可。

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

在用户控件的构造函数中,将父窗体的引用保存在本地变量中。
public AnimationControl(Form1 form)
{
        _form1 = form;
        // other initialization stuff
}

现在可以通过本地变量“_form1”访问父类中的任何内容

示例

_form1.MessageFromAnimationControl(choosenAnim);

在子类中访问父类的变量/方法或将子类的变量发送给父类。

希望能对某人有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接