本文介绍了在C#中创建GUI并在VBScript中调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试通过C#将ActiveX制作为COM可见。这是Windows窗体。我成功地将其构建为DLL ActiveX,然后编写了VBScript代码来调用它。从出现,但此后就消失了。我不知道为什么@@
这是我的代码:
I try to make an ActiveX by C# with COM-visible. It is a Windows Form. I built it successfully as a dll ActiveX, then I wrote a VBScript code to call it. The from appeared but disappeared right after that. I don't know why @@Here is my code:
C#代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Reflection;
namespace ActiveXTestLibrary
{
[ProgId("ActiveXTestLibrary.UserControl")]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
public partial class UserControl1 : Form
{
public UserControl1()
{
InitializeComponent();
}
[ComVisible(true)]
public void Hello()
{
this.Show();
}
private void radButton1_Click(object sender, EventArgs e)
{
this.lblResult.Text = "I am a .NET user control happily living \ninside an ActiveX container. Cheers.";
}
[ComRegisterFunction()]
public static void RegisterClass(string key)
{
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
RegistryKey ctrl = k.CreateSubKey("Control");
ctrl.Close();
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
inprocServer32.Close();
k.Close();
}
[ComUnregisterFunction()]
public static void UnregisterClass(string key)
{
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
if (k == null)
{
return;
}
k.DeleteSubKey("Control", false);
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
inprocServer32.DeleteSubKey("CodeBase", false);
inprocServer32.Close();
}
}
}
和VBScript:
Sub main
set objTest = CreateObject("ActiveXTestLibrary.UserControl")
objTest.Hello
end sub
call main
推荐答案
要显示表单,您需要通过调用 Application.Run :
To show a form you need to start a message loop by calling Application.Run:
[ComVisible(true)]
public void Hello()
{
Applicaiton.Run(this);
}
Show()函数将显示表单并立即退出。 Application.Run()
在关闭表单之前不会退出。
The Show() function will show the form and immediately exit. Application.Run()
will not exit until the form is closed.
这篇关于在C#中创建GUI并在VBScript中调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!