显示PDF需要关注并吃热键

时间:2012-01-25 00:06:48

标签: .net wpf pdf windowsformshost

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

显示PDF正常。两个问题:

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

    我希望将重点放在先前的

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

    ALT键甚至没有为N加下划线。即使用户选择了AxAcroPDFLib.AxAcroPDF,我也希望热键可以工作。

我理解这是WPF中的COM和Adobe,可能没有答案。如果有一个免费或廉价的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 个答案:

答案 0 :(得分:1)

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

我的解决方案是:

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

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

适合我!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我处理此问题的黑客解决方案是在启用面板之前添加延迟。 显然你想添加可能的最小延迟但是太少而且文件错误会再次引起焦点。

    System.Threading.Thread.Sleep(300)
    Panel1.Enabled = True

答案 3 :(得分: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。在一个快速计时器(〜200ms)中监视该值,并在需要时移至另一个控件。不是理想的,但是它可靠地工作。