Могу ли я переопределить ‘ComVisible (false) для унаследованных объектов? (vb)

#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