为什么从vbscript调用时不显示c#winform

时间:2011-08-16 06:54:46

标签: c# vb6 vbscript

我在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()或消息循环thingy有关,这是我不太懂的东西

我的代码或多或少会像这样。

//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

1 个答案:

答案 0 :(得分:0)

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