gpt4 book ai didi

c# - 带有 WebBrowser 控件的 Excel CustomTaskPane - 键盘/焦点问题

转载 作者:可可西里 更新时间:2023-11-01 08:10:02 25 4
gpt4 key购买 nike

我遇到了这个问题 https://social.msdn.microsoft.com/Forums/vstudio/en-US/e417e686-032c-4324-b778-fef66c7687cd/excel-customtaskpane-with-webbrowser-control-keyboardfocus-issues?forum=vsto

这里也提到了https://connect.microsoft.com/VisualStudio/feedback/details/521465/the-focus-issue-between-excel-cells-and-excel-customtaskpane-with-webbrowser-control

我正在使用 Visual Studio Professional 2013 编写一个 Excel 2010 插件。我创建了一个简单的 CustomTaskPane,其中包含一个 System.Windows.Forms.WebBrowser 子文件。该插件工作正常,我可以通过单击并更改复选框的状态在网络浏览器中导航。

enter image description here

当我点击一个输入文本框时,我获得了焦点并且我看到光标闪烁,但是当我开始输入时,文本被发送到 Excel 并写入一个单元格而不是浏览器内的文本框。

我在功能区加载时添加自定义任务 Pane 。

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 时,它工作正常。自定义任务 Pane 标题稍微变暗,文本被捕获到文本框中。

我该如何解决这个问题,以便当我单击输入文本框时,文本会进入文本框而不是 Excel?

编辑:好的,我做了一些更多的测试。如果我在我的 TaskPaneView 上添加事件来跟踪鼠标输入和单击它们工作,但前提是我删除了网络浏览器子项。这意味着网络浏览器以某种方式阻止了这些事件并阻止 TaskPaneView 理解它具有焦点。如果我还在浏览器旁边的 TaskPaneView 中添加了一个文本框表单控件,则文本框工作得很好,TaskPaneView 知道它有焦点,然后浏览器内的输入文本字段开始工作。如果我直接在网络浏览器上调用 focus 方法,TaskPaneView 就会知道它有焦点并且一切正常。很明显,问题不在于键盘,而是在单击浏览器时没有告知 TaskPaneView 它具有焦点的问题,因此击键会转到错误的区域。如果我能找到一种方法让 TaskPaneView 理解它具有焦点,那么一切都应该有效。

最佳答案

好的,我能够使用以下代码解决问题

protected override void WndProc(ref Message m)
{
const int WM_PARENTNOTIFY = 528;
if(m.Msg == WM_PARENTNOTIFY && !this.Focused)
{
this.Focus();
}
base.WndProc(ref m);
}

我将此功能添加到我的 TaskPaneView 中,它只是一个带有该网络浏览器子项的 UserControl。我对它为什么或如何工作没有深刻的理解,但基本上我认为发生的事情是我正在拦截 WndProc,它是一些处理发送到窗口的消息的低级函数。我用它来检查消息是否为 528,我认为这意味着 notifyParent。我不知道这是否正是我应该收听的消息,但它似乎有效。

一旦我收到正确的消息消息,我就会检查 TaskPaneView 是否具有焦点,如果没有,我将使用 focus() 函数赋予它焦点。我之前做过测试,结果表明如果我在 TaskPaneView 上手动调用 focus 一切正常。所以如果我没有焦点,然后手动请求焦点,我们都很好。

如果有人能提供更详细的解释来说明为什么会这样,我将不胜感激,这样我才能更好地理解它,但至少我解决了问题。感谢 Jeremy Thompson 让我以新的方式思考这个问题。

关于c# - 带有 WebBrowser 控件的 Excel CustomTaskPane - 键盘/焦点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com