首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用UserControl对象上的用户控件方法

调用UserControl对象上的用户控件方法
EN

Stack Overflow用户
提问于 2016-01-20 19:31:35
回答 2查看 1.4K关注 0票数 0

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

代码语言:javascript
运行
复制
[ComVisible(true)]
public class MyUserControl : UserControl

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

所以我宣布这个班的一名成员

代码语言:javascript
运行
复制
private static UserControl _userControl;

这里是构造函数

代码语言:javascript
运行
复制
public CTPManager(UserControl userControl, string Title, MsoCTPDockPosition Position)
{
    //stuff

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

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

代码语言:javascript
运行
复制
MyUserControl newControl = new MyUserControl();
CTPManager newCTP = new CTPManager(newControl, "window title", etc.);

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

代码语言:javascript
运行
复制
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 !

非常感谢您的回答或建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 19:39:44

您可以使用MethodInfo:

代码语言:javascript
运行
复制
//Get the method information using the method info class
 MethodInfo mi = _userControl.GetType().GetMethod("Initialize");

//Invoke the method
mi.Invoke(_userControl, null);
票数 1
EN

Stack Overflow用户

发布于 2016-01-20 19:44:04

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

代码语言:javascript
运行
复制
var init = (InitializerInterface)_userControl;
if (init != null) ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34908875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档