VB可以中调用C#的窗体不??调用C#的DLL及调用C#中的类的方法已经实现

cql0007 2006-11-28 02:23:55
已经实现了在VB中调用C#的DLL,也调用了C#中类的方法,执行了C#中的方法体内容了。


但我的实际应用是需要在VB中显示出那个C#窗体(form或userControl),就怎么实现不了,特请高手相助。

我没做过VB,不太清楚VB,做了两天,现在的个人理解:
搜集了大量的资料,好象都说C#是不能写成标准的OCX控件的,这就导致了在VB中不能以控件的形式的加到它的工具栏中,也就没办法拖这个窗口出来。现在只能用代码调用C#的COM
Dim a As myCom.MyComTest

Set a = New myCom.MyComTest
a.method1 ("abc")
a.method2 (3)

这个a其实同时还是一个窗口,要怎么样才能让这个窗口显示出来了?
非常感谢!
...全文
408 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenmaya 2010-06-09
  • 打赏
  • 举报
回复
你好 请问VB如何调用c#的dll
macker0030 2006-11-30
  • 打赏
  • 举报
回复
我给你提供点思路:
你先按上面说的,在C#中show出窗体,然后在VB中,使用API函数SetParent将C#的窗体设为VB窗体的子窗体。只要调整好,看起来的效果跟你说的把C#做的面板放到VB窗体中差不多。
cql0007 2006-11-29
  • 打赏
  • 举报
回复
在VB里,看别人的代码可以动态的加控件的

Set b = Controls.Add("myCom.MyComTest", "a", Form1)

但我这样写却提示“无效的类串,查询带Porg ID...."

然后我又照网上有贴说的先加个
Licenses.Add "myCom.MyComTest"
可加Licenses的时候也是这个出错提示。
这个时候,myCom.MyComTest是可以在VB的对象浏览器里看的到的,这个对象在VB里肯定是已经存在了,我通过它可以调用DLL里的方法了。

请问清楚VB的高手,这里该如何写了?
cql0007 2006-11-29
  • 打赏
  • 举报
回复
在C#中,
public void method2(System.Windows.Forms.Form c)
{
this.Location = new System.Drawing.Point(50, 50);
this.Size = new System.Drawing.Size(400, 400);
c.Controls.Add(this);
}

在VB里,要是调用这个方法的时候能把它的VB自己的form传进这个方法就好解决了

在VB中:
Dim a As myCom.MyComTest

Set a = New myCom.MyComTest
a.method1 ("abc")
a.method2 (Form1)
这个时候提示参数类型不对,应该是VB的FORM跟C#的FORM是完全不同的两个东西,所以导致出错了
那其实应该C#中的String跟VB中的string也是有区别的吧,象上面的a.method1("abc")这里要传一个string进去,传进去的是VB的string,应该还是做了一定的转换才能让这个参数在C#的方法中使用的吧

那有没有办法让VB的FORM转换成C#中的FORM了?
marvelstack 2006-11-29
  • 打赏
  • 举报
回复
无论是VB或C#编译以后都是转化为中间代码,所以都是可以进行互相引用的。
cql0007 2006-11-28
  • 打赏
  • 举报
回复
呵,我也是从没用过VB的了。

既然能弹出form,就没理由不出usercontrol了,我再多试试了,谢过老兄先了
真相重于对错 2006-11-28
  • 打赏
  • 举报
回复
呵呵
vb 确实没用过,只用过vbs,usercontrol应该可以,我在网页上用过,
<object cslid="mydll.mycontrol" ....
vb 怎么用具体不好讲
cql0007 2006-11-28
  • 打赏
  • 举报
回复
多谢楼上哥们,如果我的C#是个Form的话,确实在VB里可以弹出那个FORM了,而且弹出来的窗口的图标都是那个C#的默认下图标,看来是弹出C#窗口没问题了

不过问题在于我这里是要用一个userControl,而不是弹出一个窗体,我是把我的C#的一个面板放在VB的窗体中了,老兄再帮忙想想办法了,看到弹出的窗体后,本来以为没折要绝望总算看到点曙光了啊,呵呵,老兄再帮帮忙想想了
真相重于对错 2006-11-28
  • 打赏
  • 举报
回复
method1() or method2()
{
this.show();
}
cql0007 2006-11-28
  • 打赏
  • 举报
回复
a.Show()编译不过

这个a在C#中实际是这个:(MyComTest)
public class MyComTest : System.Windows.Forms.UserControl,IMyCom
而在接口IMyCom中只有两个方法
void method1(String s);
void method2(int i);
因为要将C#的DLL转变成COM+组件,必须要实现接口,所以弄了个接口了

这个时候,在VB里面,输入a后,再输入点“.",VB的IDE提示的方法就只有实现了接口的method1和method2可以了,其它的a的方法都不可用了
cql0007 2006-11-28
  • 打赏
  • 举报
回复
多谢帮顶的哥们

突出两点:
1 是VB6,不是VB.net
2 VB中调用中C#的DLL已经实现,只要关注怎么在VB中显示C#的窗口就行了
真相重于对错 2006-11-28
  • 打赏
  • 举报
回复
a.Show()
??
KJ_Wang 2006-11-28
  • 打赏
  • 举报
回复
关注,本人还真没用过交叉的这种情况!
yumanqing 2006-11-28
  • 打赏
  • 举报
回复
没做过,帮顶

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧