为我在这里可能幼稚的问题道歉,但我被困在一个我似乎遇到的问题上。
目前...
我有一个类,它继承了一个“按钮”控件(特别是 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