将外部进程添加到面板vb.net

时间:2013-04-29 14:02:43

标签: vb.net vb.net-2010

我有一个列表框中显示的文件列表。 当我从列表框中选择一个文件时,我希望将文件加载到表单上的面板中。 即如果它的单词文档单词将在面板中打开,如果它的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

但应用程序一词仍然在我的程序之外打开,而不是在面板中打开!!

有什么想法吗?并感谢您的期待!

1 个答案:

答案 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