我正在用C#开发一个Windows应用程序。我的要求之一是在Windows窗体中调用COM控件,控件将动态添加。因此,我在表单中放置一个按钮,添加创建COM控件的实例,通过代码添加面板,然后将COM控件添加到面板,然后将面板添加到流布局面板。到目前为止,一切都按预期进行。该代码用于执行此操作:
AxDCControl.AxDCControlCtl axDynamic = new AxDCControl.AxDCControlCtl();
axDynamic .Size = new Size(486, 88);
axDynamic .Name = "COM Legacy-" + DateTime.Now.ToString();
axDynamic .Dock = DockStyle.Fill;
Panel pnl = new Panel();
pnl.Size = new Size(500, 100);
pnl.Name = (Convert.ToInt32(lblCtr.Text) + 1).ToString();
pnl.Dock = DockStyle.None;
pnl.BorderStyle = BorderStyle.FixedSingle;
pnl.Controls.Add(axDynamic );
flwPnlTLC.Controls.Add(pnl);
flwPnlTLC.SetFlowBreak(pnl, true);
我在Tree View After Select事件中调用相同的代码,但是我没有显示COM控件,但我可以看出控件是创建的,因为计算控件数量并显示其名称显示COM控件。在树视图中选择事件后,我放置了相同的代码:
AxDCControl.AxDCControlCtl axDynamic = new AxDCControl.AxDCControlCtl();
axDynamic .Size = new Size(486, 88);
axDynamic .Name = "COM Legacy-" + DateTime.Now.ToString();
axDynamic .Dock = DockStyle.Fill;
axDynamic .CreateControl();
Panel pnl = new Panel();
pnl.Size = new Size(500, 100);
pnl.Name = (Convert.ToInt32(lblCtr.Text) + 1).ToString();
pnl.Dock = DockStyle.None;
pnl.BorderStyle = BorderStyle.FixedSingle;
pnl.Controls.Add(axDynamic );
flwPnlTLC.Controls.Add(pnl);
flwPnlTLC.SetFlowBreak(pnl, true);
要检查控件是否在树视图选择事件中实际加载,我已经放置了一个按钮并添加了以下内容:
foreach (Control c in flwPnlTLC.Controls)
{
label6.Text = label6.Text + Environment.NewLine + c.Name + ":" + c.Parent.Name;
foreach (Control ctrl in c.Controls)
{
label6.Text = label6.Text + Environment.NewLine + ctrl.Name + ":" + ctrl.Parent.Name;
}
}
我可以看到在LAbel6中,它显示控件的名称为COM Legacy -11/30/2015 5:36:56 PM但我看不到COM控件。我已经尝试在代码中将COM控件的visibility属性设置为true(在创建控制方法之后),但我仍然无法看到控件。
请就此提出建议。
修改
需要注意的一点是,我能够看到以编程方式添加的面板(在selectview事件后的树视图中),而不是我添加到面板中的COM控件。
2015年12月1日更新
我已删除树视图中的CreateControl
行选择后,我能够看到控件。
但在下一行中,我使用代码axDynamic.Open(FileName, true);
在控件中打开一个文件。在按钮单击事件中,打开文件语句正常工作。但是在etree视图的after select事件中,如果我删除createcontrol
行,则控件可见,但axDynamic.Open(FileName, True)
会抛出异常
System.Windows.Forms.AxHost.InvalidActiveXStateException
我在经过一定程度的搜索后发现,如果未使用CreateControl
行,则会发生此异常。
因此我必须包含CreateControl
行,但随后添加此行,控件不可见。
请帮助我,