【发布时间】:2019-05-23 17:38:18
【问题描述】:
我正在使用 Visual Studio Professional 2013 编写一个 Excel 2010 插件。我创建了一个简单的 CustomTaskPane,其中包含一个 System.Windows.Forms.WebBrowser 子文件。该插件工作正常,我可以通过单击在网络浏览器中导航并更改复选框的状态。
当我点击输入文本框时,我获得焦点并且看到光标闪烁,但是当我开始输入时,文本会发送到 Excel 并写入单元格而不是浏览器内的文本框。
我在功能区加载时添加自定义任务窗格。
private void Ribbon_Load(object sender, RibbonUIEventArgs e)
{
TaskPaneView taskPaneView = new TaskPaneView();
Microsoft.Office.Tools.CustomTaskPane myTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(taskPaneView, "Title");
myTaskPane.Visible = true;
}
当我点击文本框然后点击F6 它可以正常工作。 customtaskpane 标题稍微变暗,文本被捕获在文本框中。
我该如何解决这个问题,以便当我点击输入文本框时,文本会进入框中而不是 Excel?
编辑:好的,我做了更多测试。如果我在我的 TaskPaneView 上添加事件以跟踪鼠标输入并单击它们会起作用,但前提是我删除了 Web 浏览器子项。这意味着 Web 浏览器会以某种方式阻止这些事件并阻止 TaskPaneView 理解它具有焦点。如果我还在浏览器旁边的 TaskPaneView 中添加了一个文本框表单控件,则文本框工作得很好,TaskPaneView 理解它有焦点,然后浏览器内的输入文本字段开始工作。如果我直接在 Web 浏览器上调用 focus 方法,TaskPaneView 会理解它有焦点并且一切正常。很明显,问题不在于键盘,而是当单击浏览器时,TaskPaneView 没有被告知它具有焦点,因此击键进入了错误的区域。如果我能找到一种方法让 TaskPaneView 理解它有焦点,那么一切都应该工作。
【问题讨论】:
-
做了很多 VSTO Excel 控件...我怀疑是消息泵行为不端:BUG: Cant choose dates on a DatePicker that fall outside a floating VSTO Add-In - 您的文本框以某种方式将消息泵入单元格!
标签: c# excel winforms excel-2010 vsto