c#,通过代码

时间:2015-11-30 12:10:59

标签: .net winforms com

我正在用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行,但随后添加此行,控件不可见。

请帮助我,

0 个答案:

没有答案