首页 > 其他分享 >VSTO:WinForms如何引用Ribbon.Invalidate

VSTO:WinForms如何引用Ribbon.Invalidate

时间:2024-03-06 12:00:14浏览次数:162  
标签:Invalidate Office ribbon WinForms VSTO loginuser cs public Ribbon

问题描述:

近期项目需要在VSTO插件中设计WinForms界面,该界面需要实现一个功能:当WinForms从外部应用中获取数据后,将其传递到editbox显示栏内。项目开发中遇到以下问题:WinForms中实例化Ribbon后,再引用其中的函数或Invalidate功能,在运行时会报错:System.NullReferenceException:“未将对象引用设置到对象的实例。”
Forms.cs中:

  Ribbon myribbon1 = new Ribbon();
  myribbon1.getArasLoginUser();

Ribbon.cs中:

 public string passArasLoginUser()
 {
     _loginuser = Form1.arasLoginUserID;
     return _loginuser;
 }

public void getArasLoginUser()
{
    _loginuser = passArasLoginUser(); 
    ribbon.InvalidateControl("editBox7");
}

报错出现在ribbon.InvalidateControl("editBox7")处。经过排查发现,该方法导致ribbon为null。

解决方案:

方案一:

在ThisAddin.cs中申明公共Ribbon变量。

public Ribbon myRibbon = null;

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
    //return new Ribbon();  默认
    myRibbon = new Ribbon();
    return myRibbon;
}

在Form1.cs中做如下引用:

Globals.ThisAddIn.myRibbon.getArasLoginUser();

方案二:

Ribbon.cs中:

public class Ribbon : Office.IRibbonExtensibility

 public Office.IRibbonUI ribbon;
 internal static Office.IRibbonUI solutionRibbon;

public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
    this.ribbon = ribbonUI;
    solutionRibbon = ribbonUI;
}

 internal static string _loginuser = "null";
 public string loginUser(Office.IRibbonControl control)
 {
     return _loginuser;
 }

Form1.cs中:

Ribbon._loginuser = arasLoginUserID;
Ribbon.solutionRibbon.InvalidateControl("editBox7");

标签:Invalidate,Office,ribbon,WinForms,VSTO,loginuser,cs,public,Ribbon
From: https://www.cnblogs.com/blog-fx/p/18054807

相关文章

  • WeifenLuo.WinFormsUI.Docking学习
    转载:https://blog.csdn.net/gaoyunpeng/article/details/3873217?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-bl......
  • 界面控件DevExpress WinForms 2024产品路线图预览(一)
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!本文将介绍2024年DevExpressWinForms第一个主要更新......
  • DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(二)
    为用户创建易访问的WindowsForms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。一个可访问的WinForms应用程序提供了各种好处,包括:扩大......
  • drvstore.dll 是 Windows 操作系统中的一个动态链接库文件
    drvstore.dll是Windows操作系统中的一个动态链接库文件,用于存储和管理设备驱动程序的信息。它通常位于系统目录(如C:\Windows\System32)下。drvstore.dll的主要作用是维护设备驱动程序的备份和安装信息,以便在需要时能够快速找到并加载正确的驱动程序。当用户连接新设备或更新设......
  • DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(一)
    为用户创建易访问的WindowsForms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。一个可访问的WinForms应用程序提供了各种好处,包括:扩大......
  • DevExpress WinForms导航控件 - 交付更时尚、体验更好的业务应用(二)
    DevExpressWinForms的SideNavigation(侧边导航)和NavPanel(导航面板)可以帮助客户交付完全可模仿UI体验的业务解决方案,这些体验在当今流行的应用程序中都可找到。在上文中(点击这里回顾>>),我们为大家介绍了DevExpressWinForms导航控件中的折叠组件、导航栏组件等。接下来我们将继续......
  • cache操作:clean、invalidate与flush的含义
    前言本文试图搞清楚cache几个操作:clean、invalidate与flush的含义。由于只用过ARM和RISC-V,所以是从ARM和RISC-V的角度来说明。 cachelinecacheline是cache的基本访问单元。cacheline一般都会包含valid和dirty两个状态位,如下图的v和d。valid位表示当前cacheline的内容是......
  • C# WinForms 实现文件变化跟踪
    在实际应用中,有时会想要知道特定目录或磁盘上文件的变化情况,尤其是每天新增的文件。以下是一种使用C#WinForms的方法来轻松实现这一目标。功能概述添加目录:通过浏览功能选择要监控的目录,并将其添加到树形视图中。按钮触发:通过按钮触发执行目录检测,获取最新的文件变动情况。......
  • 界面控件DevExpress WinForms PDF Viewer,让应用轻松显示PDF文档(二)
    DevExpressWinForms的PDFViewer(查看器)控件使用户可以轻松地在Windows应用程序中直接显示PDF文档,而无需在最终用户的机器上安装外部PDF阅读器。在上文中(点击这里回顾>>)我们为大家介绍了嵌入式PDF查看器、如何浏览PDF文件等,本文将继续介绍PDFViewer的打印、表单功能等,持续关注我......
  • winforms入门简介
    原文链接:https://upimg.baike.so.com/doc/9995803-10343583.htmlwinforms脚本都是基于c#,winforms是做客户端软件,WinForm是.Net开发平台中对WindowsForm的一种称谓。简单来说:WinForms和ASP.NET的平台支持C#和VB.NET编程语言。WinForms是做客户端软件,ASP.NET是基于网络开发的......