我有一个带有2个功能区的VSTO for Word。一个内置在设计器中,我可以使用
从代码中访问它们的属性。Me.myButton1.label = "My Button Label";
但是另一个是动态的,并且已加载
GetResourceText("filename.xml");
其中XML的格式类似于
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns" label="My Tab">
<group id="grpProperties" label="Properties">
<button id="btnProps" imageMso="PropertySheet" onAction="btnMainForm" label="Change properties" size="large" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
哪个工作正常,两个功能区都显示在Word中。该xml文件包含具有ID的组和按钮。 但是我无法访问它们的属性,因为它们的对象ID未知。如何在代码中访问组或按钮标签?
答案 0 :(得分:0)
我认为这就是你所追求的。我修改了您的XML,并在C#,VB.NET和VBA中包含了getLabel
的回调。
在我的Addins中,将about信息作为一组放在最右边的功能区中。这是我的 GitHub Project ,我从项目设置中加载关于的信息。另外,我使用 Log4Net 记录了已部署的VSTO加载项中的所有错误。您可以将日志文件写入网络上的共享文件夹;我通常只需将其放置在一次单击部署路径的install文件夹下。在日志文件中,您可以捕获版本,计算机名称,用户名等。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab
idMso="TabAddIns"
label="My Tab"
>
<group
id="grpProperties"
getLabel="GetLabelText"
>
<button
id="btnProps"
imageMso="PropertySheet"
onAction="btnMainForm"
label="Change properties"
size="large"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
public string GetLabelText(Office.IRibbonControl control)
{
try
{
switch (control.Id)
{
case "grpProperties":
return "My Addin 1.0";
default:
return string.Empty;
}
}
catch (Exception)
{
return "error";
}
}
Public Function GetLabelText(control As Office.IRibbonControl) As String
Try
Select Case control.Id
Case Is = "grpProperties"
Return "My Addin 1.0"
Case Else
Return String.Empty
End Select
Catch ex As Exception
Return "error"
End Try
End Function
Public Sub GetLabelText(control As IRibbonControl, ByRef label)
On Error GoTo ErrTrap
Select Case control.id
Case Is = "grpProperties"
label = "My Addin 1.0"
Case Else
label = ""
End Select
ExitProcedure:
Exit Sub
ErrTrap:
label = "error"
Resume ExitProcedure
End Sub