焦点不会返回到活动工作表

我已经在c#中开发了一个excel插件(VSTO),并在其中有一个树视图的任务窗格。 当我点击树形视图时,它会将一些数据加载到Excel表格中。 但加载后,焦点仍然留在树形视图上,因此我无法直接在单元格中输入而不点击表单。 只要单击树形视图时填充表单,我就需要将焦点放在激活的工作表上。 我尝试了以下方法,但没有运气

ActiveSheet.Select()
ActiveSheet.Activate()

我也尝试设置范围。 还有一件事是,当我将一个断点添加到ActiveSheet.Activate()它会在点击中断点后工作,但如果没有它,它仍将焦点保留在任务窗格上。


经过努力,我找到了一个简单的解决方案

SendKeys.Send( “{F1}”);

这简单地解决了我的问题。 但很奇怪,因为实际上F2是正确的钥匙,但它不起作用。 只有F1有效。


SendKeys.Send(“{F1}”)方法对我无效。 我认为发生的事情是我们试图激活一个认为它已经被激活的窗口,除非它没有被完全激活。

因此,我们需要激活另一个窗口以确保Excel正确停用,然后重新激活Excel。 但是,我们不希望用户看到任何闪烁或怪异。 为我工作的方法是:

  • 获取桌面的句柄
  • 在桌面句柄上调用SetForegroundWindow
  • 在主Excel手柄上调用SetForegroundWindow
  • [的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

    链接地址: http://www.djcxy.com/p/67837.html

    上一篇: in focus not returned to the active sheet

    下一篇: How to check if a range exists in Excel using C#/VSTO