为了账号安全,请及时绑定邮箱和手机立即绑定

在运行时添加到功能区一次即可

在运行时添加到功能区一次即可

C#
12345678_0001 2023-08-27 10:47:32
您好,我正在尝试将当前打开的联系人电话号码添加到功能区。我创建了功能区并添加了一个包含电话号码的 SplitButton。在“ThisAddin”中,当当前资源管理器更改时,它会触发一个仅获取项目类型的事件。如果它是一个联系人,它会呼叫//ThisAddin.cs on explorer change event - if is contact run:    Globals.Ribbons.CallContact.AddButton(contactItem.BusinessTelephoneNumber);  //Ribbon classinternal void AddButton(string name)    {                    if (name != null && name.Count() > 2)        {            RibbonButton item = Globals.Factory.GetRibbonFactory().CreateRibbonButton();            item.Label = name;            item.ShowLabel = true;            this.newSplit.Items.Add(item);        }    }这有效一次,第一次打开联系人时,电话号码会显示在功能区中。打开另一个联系人窗口将导致添加功能区项目,但功能区项目为空白且为空。我只是尝试将联系人电话号码添加到功能区并将其留在那里,同时用户可以打开另一个联系人,并且运行相同的代码将电话号码添加到功能区。添加项目后,我不需要保留对它们的引用。感谢您的帮助。我觉得这里的某个地方需要有一个调用。
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您必须告诉 Outlook 刷新功能区。

您需要指定一个回调来检索按钮的标题,而不是将其硬编码到功能区的 XML 中。

请注意,由于您可以打开多个检查器,因此您必须提供在其自己的检查器中打开的每个项目的特定数据。


查看完整回答
反对 回复 2023-08-27
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

Ribbon UI 是静态的,因为它在启动时(或在窗口显示之前)加载一次。您能做的最好的事情就是定义回调并在您需要的地方调用它们。例如,您可以为功能区控件定义“getVisible”回调,而不是在运行时添加新元素。


IRibbonUI.Invalidate方法使 Ribbon 用户界面的所有控件的缓存值无效。


您可以使用 COM 加载项中的回调过程来自定义功能区 UI。对于加载项实现的每个回调,都会缓存响应。


例如,如果外接程序编写器为按钮实现 getImage 回调过程,则调用该函数一次,加载图像,然后如果需要更新图像,则使用缓存的图像而不是调用该过程。此过程将保持不变,直到加载项使用 Invalidate 方法发出信号表明缓存的值无效,此时将再次调用回调过程并缓存返回响应。然后,加载项可以通过调用 Refresh 方法强制立即更新 UI。


<customUI … OnLoad="MyAddinInitialize" …>



Dim MyRibbon As IRibbonUI 


Sub MyAddInInitialize(Ribbon As IRibbonUI) 

 Set MyRibbon = Ribbon 

End Sub 


Sub myFunction() 

 MyRibbon.Invalidate() ' Invalidates the caches of all of this add-in's controls 

End Sub


查看完整回答
反对 回复 2023-08-27
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信