焦点不会返回到活动工作表
我已经在c#中开发了一个excel插件(VSTO),并在其中有一个树视图的任务窗格。 当我点击树形视图时,它会将一些数据加载到Excel表格中。 但加载后,焦点仍然留在树形视图上,因此我无法直接在单元格中输入而不点击表单。 只要单击树形视图时填充表单,我就需要将焦点放在激活的工作表上。 我尝试了以下方法,但没有运气
ActiveSheet.Select()
ActiveSheet.Activate()
我也尝试设置范围。 还有一件事是,当我将一个断点添加到ActiveSheet.Activate()
它会在点击中断点后工作,但如果没有它,它仍将焦点保留在任务窗格上。
经过努力,我找到了一个简单的解决方案
SendKeys.Send( “{F1}”);
这简单地解决了我的问题。 但很奇怪,因为实际上F2是正确的钥匙,但它不起作用。 只有F1有效。
SendKeys.Send(“{F1}”)方法对我无效。 我认为发生的事情是我们试图激活一个认为它已经被激活的窗口,除非它没有被完全激活。
因此,我们需要激活另一个窗口以确保Excel正确停用,然后重新激活Excel。 但是,我们不希望用户看到任何闪烁或怪异。 为我工作的方法是:
[的DllImport( “USER32.DLL”)]
public static extern int GetDesktopWindow();
[DllImport(“user32.dll”,CharSet = CharSet.Auto)]
private static extern bool SetForegroundWindow(IntPtr hWnd);
SetForegroundWindow(GetDesktopWindow());
SetForegroundWindow(excelHandle);
对于任何使用Add-in Express创建Excel加载项的人,都可以使用ADXKeyFilter
事件并将缺省处理程序参数的Action
属性设置为ADXKeyFilterAction.SendToHostApplication
。