对于我的应用程序,我必须动态加载.ocx文件。我可以通过以下代码
来做到这一点 private void InitializeComponent(string strProgId)
{
ResourceManager resources = new ResourceManager(typeof(AxForm));
Type type = Type.GetTypeFromProgID(strProgId, true);
m_axCtrl = new AxControl(type.GUID.ToString());
((ISupportInitialize)(m_axCtrl)).BeginInit();
SuspendLayout();
m_axCtrl.Enabled = true;
m_axCtrl.Name = "axCtrl";
m_axCtrl.TabIndex = 0;
Controls.Add(m_axCtrl);
Name = "AxForm";
((ISupportInitialize)(m_axCtrl)).EndInit();
Resize += new EventHandler(AxForm_Resize);
ResumeLayout(false);
OnResize();
Show();
}
但我的下一个问题是我不知道如何访问动态加载控件的属性和方法。我怎样才能实现这一目标?请帮帮我
答案 0 :(得分:3)
您应该可以使用' dynamic'伪类型关键字。它永远不会在编译时失败,只在运行时(因此你必须仔细定义调用,以便它们与基础定义匹配),就像这样(我想你在OCX上有2个方法):
dynamic ocx = m_axCtrl.GetOcx();
ocx.DoThis(arg1, arg2);
ocx.DoThat();
答案 1 :(得分:1)
你必须使用反射。
例如: 假设您有一个名为LoadFile的方法。
然后:
m_axCtrl.GetOcx().GetType().InvokeMember("LoadFile", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, m_axCtrl.GetOcx(), new object[1] { path });