我有一个列表框中显示的文件列表。 当我从列表框中选择一个文件时,我希望将文件加载到表单上的面板中。 即如果它的单词文档单词将在面板中打开,如果它的pdf阅读器将打开面板。
我可以使用
将文件加载到外部Dim ProcStart As New ProcessStartInfo
ProcStart.FileName = ListBox1.SelectedItem
Process.Start(ProcStart)
然而,我不确定如何让它然后停靠在我的面板中。我试过了
Me.Panel1.Controls.Add(ProcStart)
但这显然是错误的,因为我无法添加进程作为控件。
我做了一些googleing并试图这样做
<DllImport("user32.dll")>
Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As UInteger
End Function
Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Dim proc As Process
Dim AppPath As String
AppPath = lstDocs & ListBox1.SelectedItem
proc = Process.Start(AppPath)
proc.WaitForInputIdle()
SetParent(proc.MainWindowHandle, Me.Panel1.Handle)
End Sub
但应用程序一词仍然在我的程序之外打开,而不是在面板中打开!!
有什么想法吗?并感谢您的期待!
答案 0 :(得分:1)
您是否尝试添加一个带有代码的按钮来启动该过程?
'这是我开始这个过程的方式
这将在您的代码中启动控件(插入)
Dim dep1 As (INSERT YOUR EVENT HERE)= New (INSERT YOUR EVENT HERE)
AddHandler dep.OnChange, AddressOf dep_onchange
执行按钮
Private Sub dep_onchange1(ByVal sender As System.Object, ByVal e As System.EventArgs)
' this event is run asynchronously so you will need to invoke to run on the UI thread(if required)
If Me.InvokeRequired Then
lbnoes.BeginInvoke(New MethodInvoker(AddressOf GetNoes))
Else
GetNoes()
End If
End Sub