Отображение PDF занимает фокус и ест горячую клавишу - PullRequest
0 голосов
/ 25 января 2012

Используемый код, который я нашел на SO, использовал Acrobat Reader на основе COM для отображения PDF с помощью хостинга в WindowsFormsHost.

Прекрасно отображает PDF.Две проблемы:

  • Когда я загружаю PDF, элемент управления AxAcroPDFLib.AxAcroPDF получает фокус

    Я хочу, чтобы фокус оставался на предыдущем

  • Когда AxAcroPDFLib.AxAcroPDF находится в фокусе, он съедает горячую клавишу (N)

    Клавиша ALT даже не подчеркивает N. Даже если пользователь выбирает AxAcroPDFLib.AxAcroPDF, я бы хотел, чтобы горячие клавиши работали.

Я понимаю, что это COM и Adobe в WPF, и ответа может не быть.Если для просмотра PDF есть бесплатный или дешевый элемент управления WPF, я был бы рад пойти по этому пути.Это для коммерческого применения, поэтому оно должно быть бесплатным (или дешевым) для коммерческого использования.

 <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 ]

1 голос
/ 14 ноября 2013

Не знаю, подходит ли это для тех, кто читает это: я нашел способ обойти мою версию этой проблемы (получил текстовое поле для ввода и хочу, чтобы он восстановил фокус после загрузки pdf с помощью AxAcroPDFLib.AxAcroPDF).

Мое решение было таким:

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

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

У меня работает!

0 голосов
/ 24 апреля 2019

Это работает для меня:

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

По сути, «.ContainsFocus» становится True после загрузки документа PDF. Контролируйте это значение в быстром таймере (~ 200 мс) и перефокусируйтесь на другой элемент управления, если это необходимо. Не идеально, но работает надежно.

0 голосов
/ 04 июля 2015

Мое взломанное решение для решения этой проблемы - добавить задержку перед включением панели. Очевидно, что вы хотите добавить минимально возможную задержку, но слишком маленькую, и при неправильном файле она снова заменит фокус.

    System.Threading.Thread.Sleep(300)
    Panel1.Enabled = True
0 голосов
/ 26 марта 2012

Что сказал Ганс. Похоже, что Acrobat ест ключевые нажатия, и я ничего не могу с этим поделать.

...