打开表单并单击,但单击选择父表单
Opening an form and clicking, but the click selects the parent form
我有一个表单可以从服务器上选择的文件中打开一个 PDF 文件。
问题是,当我让我的 pdf 预览器打开选定的 PDF 时,window 按原样打开。但似乎鼠标光标仍在聚焦父窗体。不是我打开的包含 PDF 预览的新表格。如果我点击新表单,它会选择后面的父表单。如果我再次单击,它会选择新表单。从那里一切都很好。
这是一种我似乎找不到来源的尴尬。
感觉程序没有聚焦新打开的表单。
我当然可以使用 Me.ShowDialog(),但问题是我无法打开多个 PDF,或者在打开 PDF 的同时使用该程序。这是对于没有 Acrobat Reader 等的用户来说,这是一种备份解决方案。
Execute Sub中dountil循环的原因是让代码等待PDF关闭
我整理了代码以使其更具可读性,希望它足够了。
ShowDoc(){
Execute(me, fileName)
这将打开
Sub Execute(xxxxx)
Dim prev As New PreviewAPDF
prev.previewPdf(fileName, FromFrm)
Do Until prev.isClosed
Application.DoEvents()
System.Threading.Thread.Sleep(50)
Loop
End Sub
xxx Lots of stuff happens that is not related xxx
这导致预览 class 称为 PreviewAPDF
Public Class PreviewAPDF
public isClosed As Boolean = False
Public Sub previewPDF(XXlotsofstuffXX)
If myStream IsNotNothing Then
Me.pdf.Load(myStream)
Else
Me.pdf.Filepath = file
End If
me.owner = parentForm
Me.Show()
Me.CenterToParent()
End Sub
Private Sub close_click(stuff)
isCLosed = True
Me.Close()
End Sub
是 DoUntil 循环导致的吗?如果是这样,有人对如何以更好的方式做同样的事情有任何建议吗?
'尝试以下
Public Sub previewPDF(XXlotsofstuffXX)
If myStream IsNotNothing Then
Me.pdf.Load(myStream)
Else
Me.pdf.Filepath = file
End If
me.owner = parentForm
Me.Show()
Me.CenterToParent()
Me.BringToFront() '<--- Try this
Me.Focus() '<--- Try this
End Sub
我的解决方案是一起避免使用 Do Until
循环。
一些研究 about Application.DoEvents
让我放弃了使用这种方式来 "halt" 代码的想法。
相反,我通过让代码 运行 顺其自然来避免它,并在稍后编写一个函数来处理代码(我最初正在等待)。
正是 Do Until
与 ApplicationDoEvents
一起导致表单失去焦点,据我所知,这个问题没有简单的解决方法。除了废弃这种过时的做事方式,而是正确地构建,而不是使用这种糟糕的编码实践。
我有一个表单可以从服务器上选择的文件中打开一个 PDF 文件。 问题是,当我让我的 pdf 预览器打开选定的 PDF 时,window 按原样打开。但似乎鼠标光标仍在聚焦父窗体。不是我打开的包含 PDF 预览的新表格。如果我点击新表单,它会选择后面的父表单。如果我再次单击,它会选择新表单。从那里一切都很好。 这是一种我似乎找不到来源的尴尬。
感觉程序没有聚焦新打开的表单。
我当然可以使用 Me.ShowDialog(),但问题是我无法打开多个 PDF,或者在打开 PDF 的同时使用该程序。这是对于没有 Acrobat Reader 等的用户来说,这是一种备份解决方案。
Execute Sub中dountil循环的原因是让代码等待PDF关闭
我整理了代码以使其更具可读性,希望它足够了。
ShowDoc(){
Execute(me, fileName)
这将打开
Sub Execute(xxxxx)
Dim prev As New PreviewAPDF
prev.previewPdf(fileName, FromFrm)
Do Until prev.isClosed
Application.DoEvents()
System.Threading.Thread.Sleep(50)
Loop
End Sub
xxx Lots of stuff happens that is not related xxx
这导致预览 class 称为 PreviewAPDF
Public Class PreviewAPDF
public isClosed As Boolean = False
Public Sub previewPDF(XXlotsofstuffXX)
If myStream IsNotNothing Then
Me.pdf.Load(myStream)
Else
Me.pdf.Filepath = file
End If
me.owner = parentForm
Me.Show()
Me.CenterToParent()
End Sub
Private Sub close_click(stuff)
isCLosed = True
Me.Close()
End Sub
是 DoUntil 循环导致的吗?如果是这样,有人对如何以更好的方式做同样的事情有任何建议吗?
'尝试以下
Public Sub previewPDF(XXlotsofstuffXX)
If myStream IsNotNothing Then
Me.pdf.Load(myStream)
Else
Me.pdf.Filepath = file
End If
me.owner = parentForm
Me.Show()
Me.CenterToParent()
Me.BringToFront() '<--- Try this
Me.Focus() '<--- Try this
End Sub
我的解决方案是一起避免使用 Do Until
循环。
一些研究 about Application.DoEvents
让我放弃了使用这种方式来 "halt" 代码的想法。
相反,我通过让代码 运行 顺其自然来避免它,并在稍后编写一个函数来处理代码(我最初正在等待)。
正是 Do Until
与 ApplicationDoEvents
一起导致表单失去焦点,据我所知,这个问题没有简单的解决方法。除了废弃这种过时的做事方式,而是正确地构建,而不是使用这种糟糕的编码实践。