1

为我在这里可能幼稚的问题道歉,但我被困在一个我似乎遇到的问题上。

目前...

我有一个类,它继承了一个“按钮”控件(特别是 Guna 框架(nuget)的按钮),

这个类被传递给一个数组,然后被传递给一个 Scriptcontrol 类并被添加到一个 VBscript(由 .AddObject 提供)

为了让脚本控件查看对象,我似乎需要将 Comvisible 设置为 true - 我已在程序集信息中设置了它。并尝试在每个班级中声明它。

我可以将对象添加到脚本中,但是,当我尝试对脚本中的对象执行任何操作时,就会出现问题。脚本说“操作在当前状态下是不合法的” 它似乎指向 ComVisible 在依赖类或对象中为假。- 但我可能是错的,我可能是。

如果我删除继承的框架,并继承一个标准的 VS 控件(即 Button),那么脚本就可以正常工作,并且我可以访问脚本中的对象。

我是否能够继承控件并覆盖其 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 ()                                   " & vbCrLf &
                                    "                                               " & vbCrLf &
                                    " Objects1(2).Property1 = ""Howdy""            " & vbCrLf &
                                    "  msgbox Objects1(2).Property1                 " & vbCrLf &
                                    "                                               " & vbCrLf &
                                    "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
4

0 回答 0