2009-06-23 84 views
0

我在使用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的属性,但它是只读的,所以我不确定如何将控件放入父容器。

任何意见,将不胜感激。

真诚,

巴蒂尔持有人

+1

它不应该是cmd1.Container =框架的Set语句,即。 Set cmd1.Container = frame – MarkJ 2009-06-25 19:18:43

回答

0

那么,如果你想知道如何动态地添加控件,这是很简单的:

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()); 
} 

现在你不必对它的引用,但你完全可以以后把它拿来。

+0

这会将它添加到表单中,但不会放入我希望显示控件的特定容器中。 SSTab似乎没有一个.Controls来添加其他控件。 框架有一个.Controls,但我目前有互操作问题,因为Spy ++报告它是一个ThunderRT6Frame,我不知道如何获得生成的Interop类。 – ShaneH 2009-06-24 16:46:15

相关问题