我已经花了大约最后一天在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”这样的布尔属性),但这正是我想要避免的。我的互操作经验是相当小的,所以在这里的任何帮助将不胜感激。
现在看到,在VB6方面,你必须设置一个完整的字体对象到UserControl上,不能只是改变字体属性。 – user2359723 2013-07-31 18:35:24