20

以下のスナップショットをご覧ください。これは、Visual Studio 2008 の「新しいプロジェクトの作成」ワークフローから取得したものです。

プロジェクトを保存するフォルダを選択するウィンドウです。C# アプリケーションで同様のウィンドウを作成するにはどうすればよいですか?

ここに画像の説明を入力

4

5 に答える 5

3

デフォルトの FolderBrowserDialog とその制限に関する良い記事を見つけました: http://www.ssware.com/articles/folderbrowserdialog-unmasked-everything-you-wanted-to-know-about-the-folder-browser-component-from -dotnet-framework.htm

WinForms、ASP.net、および WPF のファイルおよびフォルダー ブラウザー コントロールのような Windows エクスプローラーを提供する sswareのサード パーティ コンポーネント「Shell MegaPack」( http://www.ssware.com/megapack.htm ) があります。

于 2014-02-08T18:49:46.913 に答える
0

コードを C# から VB に変更しました。私の環境は VS2015 + Office 2010 です。Daniel のコードの一部の関数は Office 2003/2007 のみをサポートしているため、私のコードは Daniel のものとは少し異なります。

新しい Excel インスタンスを使用すると、OpenFileDialog または OpenFolderDialog を開くよりも遅くなりますが、よりユーザー フレンドリーになります。私のプログラムはこのコードを 1 回しか呼び出していないので、私の場合、パフォーマンスと使いやすさのトレードオフは問題ではありません。

Imports Microsoft.Office
Imports Excel = Microsoft.Office.Interop.Excel

Private Sub Button_select_raw_dir_Click(sender As Object, e As EventArgs) Handles Button_select_raw_dir.Click
    Dim raw_app As Excel.Application = New Excel.Application
    Dim raw_data_open_folder_dialog As Microsoft.Office.Core.FileDialog
    raw_data_open_folder_dialog = raw_app.FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFolderPicker)
    raw_data_open_folder_dialog.AllowMultiSelect = False
    raw_data_open_folder_dialog.Title = "Please select the raw data's dir "
    Dim nres As Integer = raw_data_open_folder_dialog.Show()
    Dim sz_SelectedPath As String = Nothing
    If nres = -1 Then '-1 means open... lol
        For Each selectedItems As Object In raw_data_open_folder_dialog.SelectedItems
            sz_SelectedPath = selectedItems.ToString()
        Next
        TextBox_raw_data_dir.Text = sz_SelectedPath
    End If

    raw_app.Quit()
    ReleaseComObject(raw_app)
    GC.Collect()
    GC.WaitForPendingFinalizers()
End Sub

' Release excel objects to avoid memory leak
Public Sub ReleaseComObject(ByRef obj As Object)
    Try
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        obj = Nothing
    Catch ex As Exception
        obj = Nothing
        MsgBox("Exception! Failed to release com obj, debug your code.")
    End Try
End Sub

C# バージョンが必要な場合は、C# に移植するのに十分賢いと思います :)

于 2015-09-02T19:45:30.070 に答える