1

我有一个列表框中显示的文件列表。当我从列表框中选择一个文件时,我希望该文件加载到我的表单上的面板中。即如果它是一个word文档单词将在面板中打开,如果它是一个pdf阅读器将在面板中打开。

我可以使用外部加载文件

Dim ProcStart As New ProcessStartInfo
ProcStart.FileName = ListBox1.SelectedItem
Process.Start(ProcStart)

但是我不确定如何让它停靠在我的面板中。我试过了

Me.Panel1.Controls.Add(ProcStart)

但这显然是错误的,因为我无法添加进程作为控件。

我做了一些谷歌搜索,并试图这样做

<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

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

有任何想法吗?并感谢您的关注!

4

1 回答 1

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
于 2013-04-29T20:39:32.530 回答