Я провел последний день или около того, написав простую библиотеку управления в VB.NET, которая будет использоваться в существующем проекте vb6. У меня больше всего работает; мои элементы управления отображаются в панели инструментов vb6, работают события и т. д. Моя текущая проблема заключается в попытке передать сложные объекты между vb6 и .NET.Совокупность типов данных маршалинга между .NET и COM
Например, свойство Font .NET TextBox. Теперь 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». Как я могу имитировать интерфейс vb6 здесь, если я не могу вернуть свойство шрифта текстового поля? Я не хочу возвращать stdFont-копию System.Drawing.Font по понятным причинам.
Теперь я мог бы просто добавлять такие методы, как SetBold(), SetItalic() и SetFont() (или логические свойства, такие как «FontIsBold»), но это именно то, чего я пытаюсь избежать. Мой опыт взаимодействия довольно минимален, поэтому любая помощь здесь будет оценена по достоинству.
Теперь посмотрите, что на стороне VB6 вы должны установить весь объект шрифта обратно в UserControl, не можете просто изменить свойство на шрифте. – user2359723