1

我在 c# 中开发了一个 excel 加载项 (VSTO),其中有一个带有树视图的任务窗格。当我单击树视图时,它会将一些数据加载到 Excel 表中。但是加载后焦点仍然保留在树视图上,因此我无法在不单击工作表的情况下直接在单元格中键入。在单击树视图后填充工作表后,我需要将焦点集中到活动工作表上。我尝试了以下方法但没有运气

ActiveSheet.Select()
ActiveSheet.Activate()

我也尝试设置范围。另一件事是,当我向它添加断点时,ActiveSheet.Activate()它会在达到断点后起作用,但如果没有它,它仍然会将焦点保持在任务窗格上。

4

3 回答 3

4

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

SendKeys.Send("{F1}");

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

于 2013-08-13T12:01:41.063 回答
1

SendKeys.Send("{F1}") 方法对我不起作用。我认为正在发生的事情是我们试图激活一个认为它已经激活的窗口,除了它没有完全激活。

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

  1. 获取桌面的句柄
  2. 在桌面句柄上调用 SetForegroundWindow
  3. 在 Excel 主句柄上调用 SetForegroundWindow

[DllImport("user32.dll")]
public static extern int GetDesktopWindow();

[DllImport("user32.dll", CharSet = CharSet.Auto)]

私有静态外部布尔 SetForegroundWindow(IntPtr hWnd);

SetForegroundWindow(GetDesktopWindow());
SetForegroundWindow(excelHandle);
于 2014-09-02T20:23:05.643 回答
0

对于使用 Add-in Express 创建 Excel 加载项的任何人,您可以使用ADXKeyFilterevent 并将Action默认处理程序参数的属性设置为ADXKeyFilterAction.SendToHostApplication.

于 2016-11-07T22:38:22.957 回答