2009-07-01 68 views
1

我已经花了大约最后一天在VB.NET中编写一个简单的控件库,用于现有的vb6项目。我有大部分工作。我的控件显示在vb6工具箱中,事件工作等等。我目前的问题是试图处理在vb6和.NET之间传递复杂对象。封装.NET和COM之间复杂的数据类型

例如,.NET TextBox的Font属性。现在,vb6使用stdFont对象和.NET(显然)使用System.Drawing.Font类型。我的这个项目的目标是让vb6变得透明。我想完全模拟每个控件的vb6接口,以最大限度地减少添加新控件时需要更改的代码,但我被卡在这里。这里是一个例子(.NET):

Public Overloads Property Font() As stdole.StdFont 
    Get       
     Return ??? 
    End Get 
    Set(ByVal value As stdole.StdFont) 
     Dim style As FontStyle = GetFontStyle(value) 
     TextBox1.Font = New Font(value.Name, value.Size, style, GraphicsUnit.Pixel, value.Charset) 
    End Set 
End Property 

正如你所看到的,'getter'是问题所在。如果我无法返回文本框的Font属性,如何在这里模仿vb6接口?我不想返回System.Drawing.Font的stdFont副本,原因很明显。现在,我可以添加像SetBold(),SetItalic()和SetFont()这样的方法(或者像“FontIsBold”这样的布尔属性),但这正是我想要避免的。我的互操作经验是相当小的,所以在这里的任何帮助将不胜感激。

回答

1

我很高兴看到您的答案......但我想我错过了一些东西。我遵循你提供的msdn链接中的说明,并且在VB6方面,我可以访问UserControl上的字体属性,但是当我尝试(例如)设置字体大小时,它不会影响方式文本被绘制。当我尝试在VB.Net端(在Set Text属性中)的嵌入式文本框中强制更改字体大小时,出现错误,指出font.size是ReadOnly ...

工作正常可用的例子?

+0

现在看到,在VB6方面,你必须设置一个完整的字体对象到UserControl上,不能只是改变字体属性。 – user2359723 2013-07-31 18:35:24