首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AxAcroPdf加载后,执行某些操作

AxAcroPdf加载后,执行某些操作
EN

Stack Overflow用户
提问于 2014-03-26 20:46:49
回答 2查看 2.6K关注 0票数 2

我有一个winform,在那里我加载一个PDF到AxAcroPDF。

看起来像这样

代码语言:javascript
复制
Public sub LoadSelectedPDF()
    PDF_Reader.Loadfile(TXT_BrowsePDF.Text) 'PDF_Reader is my AxAcroPDF
    TXT_Title.Focus()
End Sub

现在,当我运行它时,我可以看到它将焦点放在另一个文本框上,但在加载PDF时它失去了焦点(以及用于放大PDF和所有淡入的小工具条)。就像它刚开始加载,继续到下一行,当它实际加载时,它会获得焦点。我如何告诉它等待完全加载,然后专注于另一个文本框?

EN

回答 2

Stack Overflow用户

发布于 2014-05-28 18:56:53

我创建了一个扩展方法来防止AxAcroPDF窃取代码,它应该这样使用:

代码语言:javascript
复制
PDF_Reader.SuspendStealFocus()
PDF_Reader.Loadfile(TXT_BrowsePDF.Text)

可以在here中找到原始的C#源文件。我使用了.NET反射器将其转换为VB.NET (仅在Winforms中测试过,它将数据存储在PDF_Reader.Tag中):

代码语言:javascript
复制
<Extension> _
Friend Class AxAcroPDFFocusExtensions


   <Extension> _
   Public Shared Sub SuspendStealFocus(ByVal pdfControl As AxAcroPDF)
      pdfControl.SuspendStealFocus(250)
   End Sub

   <Extension> _
   Public Shared Sub SuspendStealFocus(ByVal pdfControl As AxAcroPDF, ByVal timeoutInMilliSeconds As Integer)
      pdfControl.Enabled = False;

      Dim t As New Timer
      t.Interval = timeoutInMilliSeconds
      AddHandler t.Tick, New EventHandler(AddressOf AxAcroPDFFocusExtensions.t_Tick)
      t.Start
      pdfControl.Tag = Guid.NewGuid
      t.Tag = New TimerTag(pdfControl, pdfControl.Tag)
   End Sub

   <Extension> _
   Public Shared Sub SuspendStealFocus(ByVal pdfControl As AxAcroPDF, ByVal timeSpan As TimeSpan)
      pdfControl.SuspendStealFocus(CInt(timeSpan.TotalMilliseconds))
   End Sub

   Private Shared Sub t_Tick(ByVal sender As Object, ByVal e As EventArgs)
      Dim timer As Timer = DirectCast(sender, Timer)
      timer.Stop
      timer.Dispose
      Dim t As TimerTag = DirectCast(timer.Tag, TimerTag)
      If Object.ReferenceEquals(t.Control.Tag, t.ControlTag) Then
            t.Control.Enabled = True
      End If
   End Sub



   <StructLayout(LayoutKind.Sequential)> _
   Private Structure TimerTag
      Public ControlTag As Object
      Public Control As AxAcroPDF
      Public Sub New(ByVal control As AxAcroPDF, ByVal controlTag As Object)
            Me.Control = control
            Me.ControlTag = controlTag
      End Sub
   End Structure
End Class
票数 1
EN

Stack Overflow用户

发布于 2016-11-08 20:57:20

将AxAcroPDF放入面板中,然后:

代码语言:javascript
复制
Public sub LoadSelectedPDF()
    PDF_Reader.Loadfile(TXT_BrowsePDF.Text) 'PDF_Reader is my AxAcroPDF
    panel_pdf.Enabled = False
    TXT_Title.Focus()    
End Sub

在TXT_Title enter事件中:

代码语言:javascript
复制
System.Threading.Thread.Sleep(500)
panel_pdf.Enabled = True
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22661524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档