在UserControl对象上调用用户控件方法

时间:2016-01-20 19:31:36

标签: c# user-controls

我有一个从UserControl派生的用户控件类

[ComVisible(true)]
public class MyUserControl : UserControl

它包含一个名为Initialize()的方法:public void Initialize() 在另一个类中,我需要使用MyUserControl,但我想声明并使用通用的UserControl对象。这样,即使使用新的不同的用户控件,我也可以重用这个类(比如MyUserControl2)。

所以我宣布这个班的成员为

private static UserControl _userControl;

这是构造函数

public CTPManager(UserControl userControl, string Title, MsoCTPDockPosition Position)
{
    //stuff

    _userControl = userControl;
    _title = Title;
    _position = Position;
}

第一个问题:以后可以用以下方法实例化该类:

MyUserControl newControl = new MyUserControl();
CTPManager newCTP = new CTPManager(newControl, "window title", etc.);

如果是这样,我可以调用MyUserControl newControl的Initialize()方法,因为我只需要在CTPManager类中执行这两个调用:

CustomTaskPaneFactory.CreateCustomTaskPane(typeof(UserControl), _title, _EXCELApp.ActiveWindow)); //-> this one will be ok because of CreateCustomTaskPane signature
_userControl.Initialize //-> that is what I would like to be able to do !

非常感谢您的任何答案或建议

2 个答案:

答案 0 :(得分:0)

您可以使用MethodInfo:

//Get the method information using the method info class
 MethodInfo mi = _userControl.GetType().GetMethod("Initialize");

//Invoke the method
mi.Invoke(_userControl, null);

答案 1 :(得分:0)

使用Initialize()方法创建一个接口。实现接口。将控件保存在CTPManager中作为该接口。或者,如果要将其存储为UserControl,则可以将其转换为所需类型:

var init = (InitializerInterface)_userControl;
if (init != null) ...