0

使用我在 SO 上找到的代码使用基于 COM 的 Acrobat Reader 通过托管在 WindowsFormsHost 中来显示 PDF。

它可以很好地显示 PDF。两个问题:

  • 当我加载 PDF 时,控件 AxAcroPDFLib.AxAcroPDF 成为焦点

    我希望专注于先前

  • 当 AxAcroPDFLib.AxAcroPDF 获得焦点时,它会吃掉热键 (N)

    ALT 键甚至没有在 N 下划线。即使用户选择 AxAcroPDFLib.AxAcroPDF,我也希望热键能够正常工作。

我知道这是 WPF 中的 COM 和 Adob​​e,可能没有答案。如果有免费或便宜的 WPF 控件来查看 PDF,我会很乐意走这条路。这是用于商业应用程序,因此必须免费(或便宜)用于商业用途。

 <Button  Click="Button_Click">_Next</Button>     

 <WindowsFormsHost Name="windowsFormsHost1"  Margin="1" />
 UserControl1 UC = new UserControl1(@"C:\temp\1000001.pdf");
 this.windowsFormsHost1.Child = UC;


 public UserControl1(string filename)
 {
     InitializeComponent();
     this.axAcroPDF1.LoadFile(filename);
 }

这确实显示 PDF。在生产应用程序中,我根据使用的操作显示各种 PDF。

4

4 回答 4

1

不知道它是否适合任何阅读本文的人的需求:我刚刚找到了解决这个问题的方法(获得了一个输入文本框,并希望它在使用 AxAcroPDFLib.AxAcroPDF 加载 pdf 后重新获得焦点)。

我的解决方案是这样的:

        private void returnFocus(object sender, EventArgs e)
    {
        textBox.Focus();
    }

        this.textBox.LostFocus += new System.EventHandler(this.returnFocus);

为我工作!

于 2013-11-14T11:15:44.290 回答
0

汉斯说的。Acrobat 似乎正在吃击键,对此我无能为力。

于 2012-03-26T12:53:29.543 回答
0

我解决这个问题的黑客解决方案是在启用面板之前添加延迟。显然,您想添加可能的最小延迟,但太少了,并且使用错误的文件会再次引起焦点。

    System.Threading.Thread.Sleep(300)
    Panel1.Enabled = True
于 2015-07-04T12:34:44.823 回答
0

这对我有用:

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    If Me.AxAcroPDF1.ContainsFocus = True Then
      Me.TextBox1.Focus()
    End If
End Sub

基本上,一旦加载 PDF 文档,“.ContainsFocus”就会变为 True。在快速计时器(约 200 毫秒)中监控此值,并在需要时重新关注另一个控件。不理想,但它工作可靠。

于 2019-04-24T14:04:17.073 回答