VSTO - 使用GetVstoObject获取除文档之外的其他内容?

时间:2016-04-30 15:46:01

标签: vb.net vsto

我需要在vb.net中为Word做一个VSTO加载项。我创建了一个自定义任务窗格,并希望在运行时为其添加图片和标签。我可以使用GetVstoObject方法获取活动文档并将标签添加到文档正文中。这有效。但是,我需要将标签添加到任务窗格。我可以使用GetVstoObject来获取自定义任务窗格对象吗?似乎该方法只接受类型文档。

这是我的ThisAddIn课程:

Public Class ThisAddIn

Private definitionsChecker As DefinitionsCheckerControl
Private taskPane As Microsoft.Office.Tools.CustomTaskPane

Private Sub ThisAddIn_Startup() Handles Me.Startup
    definitionsChecker = New DefinitionsCheckerControl
    taskPane = Me.CustomTaskPanes.Add(definitionsChecker, "Definitions Checker")
    taskPane.Visible = True

End Sub

Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown

End Sub

End Class

这是包含自定义任务窗格控件的类:

Public Class DefinitionsCheckerControl

' This procedure works
Private Sub addLabelToDoc()
    Dim document As Word.Document
    Dim vstoDocument As Document
    Dim mylabel As System.Windows.Forms.Label

    document = Globals.ThisAddIn.Application.ActiveDocument
    vstoDocument = Globals.Factory.GetVstoObject(document)
    mylabel = vstoDocument.Controls.AddLabel(document.Paragraphs(30).Range, 30, 12, "label2")
    mylabel.Text = "This is a label."
End Sub

' This procedure I need to modify where I added question marks
Private Sub addLabelToTaskPane()
    Dim document As Word.????
    Dim vstoDocument As ????
    Dim mylabel As System.Windows.Forms.Label

    document = Globals.ThisAddIn.Application.ActiveDocument
    vstoDocument = Globals.Factory.GetVstoObject(document)
    mylabel = vstoDocument.Controls.AddLabel(????, 30, 12, "label2")
    mylabel.Text = "This is a label."
End Sub

Private Sub btnRunTool_Click(sender As Object, e As EventArgs) Handles btnRunTool.Click
    addLabelToTaskPane()
End Sub

End Class

2 个答案:

答案 0 :(得分:0)

GetVstoObject方法用于“包装”扩展VSTO对象中的本机Office对象。对于Word,这可以是Document,Range或ContentControl。

它不习惯使用自定义任务窗格。您处理CTP的方式与Windows窗体的处理方式非常相似。

我将假设代码示例中的definitionsChecker是您要添加到任务窗格(taskPane)的UserControl。在这种情况下,您将新控件(标签)添加到definitionsChecker(UserControl)。像这样:

Dim mylabel As System.Windows.Forms.Label = new System.Windows.Forms.Label()
myLabel.Text = "text in the label"
definitionsChecker.Controls.Add(mylabel)

答案 1 :(得分:0)

你是对的。谢谢你让我回到赛道上。还有一个问题破坏了我的代码,我正在寻找解决方案,而不是。