#arrays #class #inheritance #comvisible #msscriptcontrol
#массивы #класс #наследование #comvisible #msscriptcontrol
Вопрос:
прошу прощения за мой, вероятно, наивный вопрос здесь, но я застрял на проблеме, с которой, похоже, столкнулся.
В настоящее время…
У меня есть класс, который наследует элемент управления ‘Button’ (в частности, кнопку фреймворка Guna (nuget)),
этот класс передается в массив, а затем в класс Scriptcontrol и добавляется в VBScript (любезно предоставлено .AddObject)
Чтобы элемент управления скриптом мог видеть объекты, мне, похоже, нужно, чтобы Comvisible был установлен как true — я установил это в информации о сборке. и попытался объявить его в каждом классе.
Я могу добавить объекты в скрипт нормально, однако проблема возникает, когда я пытаюсь что-либо сделать с объектом в скрипте. Сценарий говорит: «операция не является законной в текущем состоянии», Похоже, это указывает на то, что ComVisible является ложным в зависимых классах или объектах. — но я могу ошибаться, скорее всего, так оно и есть.
Если я удалю унаследованный фреймворк и унаследую стандартный элемент управления VS (например, кнопку), тогда скрипт будет работать так, как должен, и я смогу получить доступ к объектам в скрипте.
Могу ли я наследовать элемент управления и переопределить его атрибут Comvisible / принудительно? Есть ли лучший способ сделать это? или, возможно, я неправильно добавляю объекты в сценарий?
Я использую VS2019 — vb — winforms -.net4.8
Заранее спасибо.
Imports System.Runtime.InteropServices
<ComVisible(True)>
Public Class Form1
Public ObjectArray(10) As MyButton
Dim SCRIPT1 As New ScriptController
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Init()
End Sub
Sub Init()
Dim i As Integer
For i = 0 To 9
ObjectArray(i) = New MyButton
ObjectArray(i).Property1 = i.ToString
Next i
SCRIPT1.DoScript(ObjectArray)
End Sub
End Class
Public Class ScriptController
Inherits MSScriptControl.ScriptControlClass
Dim c As New Collection
Public ScriptToRun As String = (" Sub Main () " amp; vbCrLf amp;
" " amp; vbCrLf amp;
" Objects1(2).Property1 = ""Howdy"" " amp; vbCrLf amp;
" msgbox Objects1(2).Property1 " amp; vbCrLf amp;
" " amp; vbCrLf amp;
"End Sub")
Public Sub DoScript(ObjArr() As Object)
Dim s As New MSScriptControl.ScriptControlClass
Dim i As Integer
c.Clear()
For i = 1 To 10
c.Add(ObjArr(i - 1))
Next i
s.Language = "vbscript"
s.AllowUI = True
s.AddObject("Objects1", c, True)
s.AddCode(ScriptToRun)
s.Run("Main")
s.Reset()
End Sub
End Class
Public Class MyButton
' Inherits Guna.UI2.WinForms.Guna2Button
' // Changing between these switches the problem //
Inherits Button
Public Property Property1 As String
End Class