gpt4 book ai didi

c# - 在 VSTO 插件中存储一些数据的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-30 20:18:36 25 4
gpt4 key购买 nike

我开发了一个 outlook 插件,必须打开或关闭。

为此我声明了一个静态变量,如下所示,

ThisAddIn.cs

public static bool isAddInOn = false;

RibbonButton.cs

    private void btnRibbon_Click(object sender, RibbonControlEventArgs e)
{
if (ThisAddIn.isAddInOn )
{

ThisAddIn.isAddInOn = false;
btnRibbon.Label = "Disabled";

}
else
{

ThisAddIn.isAddInOn = true;
btnRibbon.Label = "Enabled";


}
}

它正在工作。但是当我关闭 outlook 并再次打开它时,静态变量再次重置。这意味着当我默认打开 Outlook 时,我的加载项处于禁用状态。

我只想将该值存储在某个地方。这样我就可以在重新打开 Outlook 时检查该值。

场景:

1)开放的视野

2) 通过单击其 Logo (功能区中)启用加载项

3) 现在关闭前景

4) 当我再次打开 outlook 时,它必须启用

那么我该如何实现呢?

最佳答案

您可以使用多种技术来实现这一结果。确保您的设置必须在加载项启动期间序列化到某些存储/反序列化。

一个可能的解决方案是为此使用注册表(在这种情况下可能是 HKCU(当前用户,然后它将对使用您的加载项的每个用户都是私有(private)的)并且不需要特殊许可。

用于存储变量:

    public void StoreInRegistry(string keyName, string value)
{
RegistryKey rootKey = Registry.CurrentUser;
string registryPath = @"Software\YourCompanyName\YourAddInName";
using (RegistryKey rk = rootKey.CreateSubKey(registryPath))
{
rk.SetValue(keyName, value, RegistryValueKind.String);
}
}

对于读取变量:

    public string ReadFromRegistry(string keyName, string defaultValue)
{
RegistryKey rootKey = Registry.CurrentUser;
string registryPath = @"Software\YourCompanyName\YourAddInName";
using (RegistryKey rk = rootKey.OpenSubKey(registryPath, false))
{
if (rk == null)
{
return defaultValue;
}

var res = rk.GetValue(keyName, defaultValue);
if (res == null)
{
return defaultValue;
}

return res.ToString();
}
}

此类存储/检索变量应在加载项初始化期间用于设置您的属性。所以修改看起来像:

ThisAddin.cs

public static bool isAddInOn = ReadFromRegistry("MySetting1", "0") == "1";

RibbonButton.cs

private void btnRibbon_Click(object sender, RibbonControlEventArgs e)
{
if (ThisAddIn.isAddInOn )
{

ThisAddIn.isAddInOn = false;
btnRibbon.Label = "Disabled";

}
else
{

ThisAddIn.isAddInOn = true;
btnRibbon.Label = "Enabled";


}
StoreInRegistry("MySetting1", ThisAddIn.isAddInOn ? "1" : "0");
}

其他选项可以序列化到文件 - 一些类的设置序列化到即隔离存储、数据库(本地或中央)等。

关于c# - 在 VSTO 插件中存储一些数据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40803924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com