You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将C# WinForms窗口嵌入Delphi 7后WebView2无法接收键盘输入的问题求助

将C# WinForms窗口嵌入Delphi 7后WebView2无法接收键盘输入的问题求助

大家好,我最近在给老旧的Delphi7桌面程序做改造,想集成一个现代Web界面——具体是把一个基于WebView2的C# WinForms程序,通过Windows API嵌入到Delphi的Panel控件里。

单独运行这个C#程序时一切正常,但用SetParent把它嵌入Delphi的Panel后,问题就来了:WebView2能正常渲染页面,鼠标点击、滚动这些操作都没问题,但键盘输入完全传不到WebView的文本框里,具体表现如下:

具体症状

点击WebView里的输入框时:

  • 输入框内能正常显示光标
  • 鼠标的各种操作都正常响应
  • 但敲击键盘时,输入的字符会跑到之前获得焦点的Delphi控件里,完全不进WebView的输入框

举个实际操作的场景:

  1. 先点击Delphi界面上的一个Edit编辑框
  2. 再点击WebView里的输入框(能看到光标在输入框内闪烁)
  3. 开始打字
  4. 结果所有输入的文字都出现在刚才的Delphi Edit框里,WebView输入框里啥都没有

下面是我用到的关键代码,麻烦各位帮忙看看哪里出了问题:

Delphi 端代码

SetParent(FAgenteHandle, pnlAgenteHost.Handle);

Style := GetWindowLong(FAgenteHandle, GWL_STYLE);
Style := Style and not WS_POPUP;
Style := Style or WS_CHILD or WS_VISIBLE;

SetWindowLong(FAgenteHandle, GWL_STYLE, Style);

SetWindowPos(
  FAgenteHandle,
  0,
  0,
  0,
  pnlAgenteHost.ClientWidth,
  pnlAgenteHost.ClientHeight,
  SWP_NOZORDER or SWP_FRAMECHANGED
);

C# WinForms 端代码

public partial class Agente : Form
{
    private readonly WebView2 web = new WebView2();

    public Agente()
    {
        InitializeComponent();

        FormBorderStyle = FormBorderStyle.None;
        ShowInTaskbar = false;

        web.Dock = DockStyle.Fill;
        web.TabStop = true;

        Controls.Add(web);
    }

    protected override async void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        await web.EnsureCoreWebView2Async(null);

        web.Source = new Uri("https://example.com");
    }
}

有没有朋友遇到过类似的嵌入窗口焦点/键盘输入问题?或者知道怎么让键盘输入正确传递给嵌入的WebView2?麻烦给点思路,非常感谢!

备注:内容来源于stack exchange,提问作者Roberto Vieira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:33:11