【问题标题】:How do I add .Net controls to a vb6 application dynamically如何将 .Net 控件动态添加到 vb6 应用程序
【发布时间】:2010-11-05 08:43:30
【问题描述】:

我正在开发一个可使用 VBScript 进行扩展的应用程序。我可以访问 VB6 表单,并且可以在表单上添加控件和引用其他控件。我还可以通过互操作启动 .Net 表单。

我想要做的是创建对.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 的属性,但它是只读的,所以我不确定如何将控件放入父容器中。

任何建议将不胜感激。

此致,

肖恩·霍尔德

【问题讨论】:

  • 不应该是 cmd1.Container = 框架的 Set 语句,即。设置 cmd1.Container = frame

标签: .net vb6 interop


【解决方案1】:

如果你想知道如何动态添加控件,这很简单:

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 。 Frame 确实有一个 .Controls,但我目前在互操作方面遇到问题,因为 Spy++ 报告它是一个 ThunderRT6Frame,我不确定如何生成互操作类。
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多