2016-07-06 77 views
-2

我有一个窗体,这个叫做OpenFileDialog。
我想在文件窗格中预先关注某个文件(突出显示)。
可能吗?
我有我可以选择所有文件的代码,现在我想要选择1个文件。OpenFileDialog预先选择一个文件

Public Class Form1 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim OpenFileDialog1 As New OpenFileDialog 
     OpenFileDialog1.Filter = "All files (*.*)|*.*" 
     OpenFileDialog1.RestoreDirectory = True 
     OpenFileDialog1.FileName = "C:\MyFile.wmv" 
     OpenFileDialog1.InitialDirectory = My.Settings.VideoDirectory 
     OpenFileDialog1.Multiselect = True 
     If OpenFileDialog1.ShowDialog() = DialogResult.OK Then 
      My.Settings.VideoDirectory = Path.GetDirectoryName(OpenFileDialog1.FileName) 
     End If 

    End Sub 

    Dim m_lastDialogHandle As IntPtr 

    Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 
    Public Declare Function FindWindowExW Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> ByVal lpszClass As String, <MarshalAs(UnmanagedType.LPWStr)> ByVal lpszWindow As String) As IntPtr 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     MyBase.WndProc(m) 
     If m.Msg = 289 Then ' Notify of message loop 
      Dim dialogHandle As IntPtr = m.LParam 
      If (dialogHandle <> m_lastDialogHandle) Then 
       Dim hChild1 As IntPtr = 0 
       Dim hChild2 As IntPtr = 0 
       Dim hChild3 As IntPtr = 0 
       m_lastDialogHandle = dialogHandle 
       hChild1 = FindWindowExW(dialogHandle, 0, "DUIViewWndClassName", Nothing) 
       If hChild1 = 0 Then Exit Sub 
       hChild1 = FindWindowExW(hChild1, 0, "DirectUIHWND", Nothing) 
       If hChild1 = 0 Then Exit Sub 
       Do 
        hChild2 = FindWindowExW(hChild1, hChild2, Nothing, Nothing) 
        If hChild2 = 0 Then Exit Sub 
        hChild3 = FindWindowExW(hChild2, 0, "SHELLDLL_DefView", "ShellView") 
       Loop Until hChild3 <> 0 
       SendMessage(hChild3, &H111, &H17021, 0) 
      End If 
     End If 
    End Sub 

End Class 

我敢肯定有可能选择1个文件,我只需要知道好的WM_COMMAND。
任何帮助将不胜感激。

回答

0

我发现自己是IShellBrowser,IShellView和IShellFolder实现的解决方案。现在可以关闭这个问题。

0

在调用ShowDialog之前设置对话框的FileNameDefaultExt属性,以便在视频文件夹中预先选择MyFile。这将打开一个没有扩展名或wmv的文件。任何其他扩展应该失败。

Dim OpenFileDialog1 As New OpenFileDialog 
OpenFileDialog1.Filter = "All files (*.*)|*.*" 
OpenFileDialog1.RestoreDirectory = True 
OpenFileDialog1.FileName = "MyFile" 
OpenFileDialog1.DefaultExt = "wmv" 
OpenFileDialog1.InitialDirectory = My.Settings.VideoDirectory 
OpenFileDialog1.Multiselect = True 
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then 
    My.Settings.VideoDirectory = Path.GetDirectoryName(OpenFileDialog1.FileName) 
End If 
+0

感谢您的努力,但它没有工作,文件没有在文件窗格中突出显示。我想让文件集中在文件窗格中,以便我可以快速查看上次选择的文件。 –

+0

你的问题不是很清楚,那么你应该更新它。你没有在文件窗格中突出显示文件。这就像你问的那样选择文件。如果你点击你的按钮1然后点击打开它将打开文件,如果它存在。至少它在VB 2013中有效。编辑:我看到你在注释中加入了高亮请求。没有读过这些。编辑你的问题。 – topshot

相关问题