如何将.Net控件动态添加到vb6应用程序
我在使用VBScript扩展的应用程序上工作。我可以访问VB6表单,并可以添加控件并引用表单上的其他控件。我也可以通过interop启动.Net表单。如何将.Net控件动态添加到vb6应用程序
我想要做的是创建一个.Net组件的引用,并将其引用到VB6 Frame或SSTab,然后让该组件创建一个互操作用户控件并将其放置在Frame中/的SSTab。如果我只使用VBScript来做到这一点我做类似如下:
set frame = Form.Controls("Frame1")
set cmd1 = Form.Controls.Add("vb.commandbutton", "Cmd1")
cmd1.Container = frame
cmd1.Visible = true
我希望能够做到在InteropUserControl类似的东西。在互操作用户控件上有一个名为Container的属性,但它是只读的,所以我不确定如何将控件放入父容器。
任何意见,将不胜感激。
真诚,
巴蒂尔持有人
那么,如果你想知道如何动态地添加控件,这是很简单的:
Form.Controls.Add(new MyControl())
如果你想拿到的一个控件到父容器,这将是做到这一点的方式。看起来您不能随时更改父控件,因此您必须决定使用if/else逻辑谁来添加您的子控件。例如伪代码:
InterOpControl myControl = new InterOpControl();
if (someVariable) {
Form1.Controls.Add(myControl);
}
else {
Form2.Controls.Add(myControl);
}
如果你不能做到这一点,那么你可以做:
if (someVariable) {
Form1.Controls.Add(new InterOpControl());
}
else {
Form2.Controls.Add(new InterOpControl());
}
现在你不必对它的引用,但你完全可以以后把它拿来。
这会将它添加到表单中,但不会放入我希望显示控件的特定容器中。 SSTab似乎没有一个.Controls来添加其他控件。 框架有一个.Controls,但我目前有互操作问题,因为Spy ++报告它是一个ThunderRT6Frame,我不知道如何获得生成的Interop类。 – ShaneH 2009-06-24 16:46:15
它不应该是cmd1.Container =框架的Set语句,即。 Set cmd1.Container = frame – MarkJ 2009-06-25 19:18:43