【问题标题】:Why c# winform is not shown when called from vbscript为什么从vbscript调用时不显示c#winform
【发布时间】:2011-08-19 02:58:09
【问题描述】:

我已经用 C# 编写了一个 API,它将在 vb6 和 vbscript 中使用,并假设我的 API 详细信息如下:
1. API中有一个表单,但它没有暴露给COM
2. 有一个名为 ShowForm() 的方法,代码为“form1.Show()”。这个方法 ShowForm() 暴露给 COM,所以我可以从 vb6/vbscript 调用这个方法。

所以,我的问题是:
当我在按钮单击事件下调用 vb6 中的 ShowForm() 方法时,会显示在 C# API 中创建的表单,但如果我实例化相同的类并在 vbscript 中调用相同的方法,则表单不会显示。

但是,如果我更改 ShowForm() 中的代码,
- 从“form1.Show()”到“form1.ShowDialog()”,它将在 vb6/vbscript 中显示。但是,它显示为模态形式,我想要的是无模态的 或者
- 从“form1.Show()”到“Application.Run(form1)”。它会显示在 vbscript 但不在 vb6 中(它实际上显示在 vb6 中,但是在我用 C# 关闭表单后它崩溃了)

我该怎么做才能使它在 vb6 和 vbscript 中正常工作?非常感谢您的建议

PS:不是脚本语法问题或COM问题。它应该与 form.show()/ShowDialog()/Application.Run() 或消息循环有关,这是我不太了解的东西

我的代码或多或少是这样的。

//C# code
public void ShowForm()
{
 m_frm.tempWebBrowser.Navigate("http://stackoverflow.com", "_self", Encoding.Default.GetBytes(""), "Content-Type: application/x-www-form-urlencoded");

 m_frm.FormBorderStyle = FormBorderStyle.Sizable;
 m_frm.ShowInTaskbar = true;
 m_frm.WindowState = FormWindowState.Maximized;
 m_frm.tempWebBrowser.Visible = true;

 m_frm.Show();     
}

//VB6 code, vbscript also using exactly the same code in the event
Private Sub Command1_Click()
 Dim tempClass
 Set tempClass = CreateObject("myClass.API")
 tempClass.ShowForm
End Sub

【问题讨论】:

    标签: c# vb6 vbscript


    【解决方案1】:

    由于您的建议,该表单未完全显示...线程上没有运行消息泵。如果您试图从 VBScript 中触发并忘记 C# 窗口,我建议您在单独的过程中启动它。它会产生与您描述的相同的效果。如果您尝试启动它并等待用户与之交互(例如您正在提示他们提供信息),那么以模态方式显示是合适的。

    【讨论】:

    • 我对 VB6/VBscript 中的多线程一无所知,但在我进一步评论之前让我花点时间尝试一下
    猜你喜欢
    • 2017-08-29
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多