问题描述
我们在计算机上同时使用法语和英语软件,然后我们需要从“.”切换。以“,”作为小数点分隔符。为了促进这一点,我正在使用 C# Visual Studio 2017 构建一个 Excel 自定义功能区。我在功能区上放了一个选项卡、一个复选框来更改 Excel 应用程序的 UseSystemSeparators 属性,以及 2 个编辑框来显示和修改 DecimalSeparator以及千位分隔符属性。当用户更改控件的值时,会触发控件的 PropertyChanged 事件,我会相应地更新应用程序属性。一切正常。当用户手动进入 Excel 并更改高级选项时会出现问题,我的选项卡上的控件不会自动更新。那么有没有办法:
是否捕获在属性 UseSystemSeparators 被修改时出现的事件,以便我可以更新我的控件?
或捕获在选择我的自定义选项卡时出现的事件,以便在显示时更新我的控件?
到目前为止,我没有发现任何可以帮助我的东西。 UseSystemSeparators 不会引发任何事件,我还没有找到任何方法来知道何时显示我的自定义选项卡。请注意,我使用功能区设计器来构建我的自定义功能区(不是 XML)。
private void ChkUseSysteme_Click(object sender,RibbonControlEventArgs e)
{
Excel.Application excelObj = Globals.ThisAddIn.Application;
if (chkUseSysteme.Checked)
{
excelObj.UseSystemSeparators = true;
ebDecimal.Enabled = false;
ebMilliers.Enabled = false;
}
else
{
excelObj.UseSystemSeparators = false;
ebDecimal.Enabled = true;
ebMilliers.Enabled = true;
}
}
private void EbDecimal_TextChanged(object sender,RibbonControlEventArgs e)
{
Excel.Application excelObj = Globals.ThisAddIn.Application;
if (!excelObj.UseSystemSeparators)
{
excelObj.DecimalSeparator = ebDecimal.Text;
}
excelObj = null;
}
private void EbMilliers_TextChanged(object sender,RibbonControlEventArgs e)
{
Excel.Application excelObj = Globals.ThisAddIn.Application;
if (!excelObj.UseSystemSeparators)
{
excelObj.ThousandsSeparator = ebMilliers.Text;
}
excelObj = null;
}
解决方法
据我所知,没有您可以订阅的此类事件。但作为一个想法,您可以考虑利用计时器定期(例如每 1 秒)检查 UseSystemSeparators
的值并采取相应的措施。