9
var dlg = new SaveFileDialog();
dlg.FileName = "graph";
dlg.DefaultExt = ".bmp";
dlg.Filter = "PNG|*.png|DOT|*.dot|Windows Bitmap Format|*.bmp|GIF|*.gif|JPEG|*.jpg|PDF|*.pdf|Scalable Vector Graphics|*.svg|Tag Image File Format|*.tiff";

拡張子は常にデフォルトで.png。;DefaultExtがある場合は無視されているようです。Filter次に、デフォルトでリストの最初のオプションになります。

デフォルトの内線を実際に尊重するように強制する方法はありますか?

4

4 に答える 4

12

FilterIndexの代わりにプロパティを設定する必要がありDefaultExtます。それでも使用する場合はDefaultExt、手動で適切なフィルターインデックスに変換できます。

public static void UseDefaultExtAsFilterIndex(FileDialog dialog)
{
    var ext = "*." + dialog.DefaultExt;
    var filter = dialog.Filter;
    var filters = filter.Split('|');
    for(int i = 1; i < filters.Length; i += 2)
    {
        if(filters[i] == ext)
        {
            dialog.FilterIndex = 1 + (i - 1) / 2;
            return;
        }
    }
}

var dlg = new SaveFileDialog();
dlg.FileName = "graph";
dlg.DefaultExt = ".bmp";
dlg.Filter = "PNG|*.png|DOT|*.dot|Windows Bitmap Format|*.bmp|GIF|*.gif|JPEG|*.jpg|PDF|*.pdf|Scalable Vector Graphics|*.svg|Tag Image File Format|*.tiff";
UseDefaultExtAsFilterIndex(dlg);
dlg.ShowDialog();
于 2011-05-23T23:49:15.777 に答える
6

DefaultExtは、ユーザーが拡張子のないファイル名を選択した場合に使用される拡張子です(少なくとも、MSDNの説明を読んで理解できます)。

アプリケーションのユーザーが拡張子なしのファイル名を指定すると、FileDialogはファイル名に拡張子を追加します。

bmpフィルタリストの最初の項目を作成する必要がある場合があります。

于 2011-05-23T23:36:46.280 に答える
2

私は数年遅れていますが、偶然にも、この質問のコードを見ているときに問題の解決策を見つけました。

そこで彼は。なしで拡張子を指定しました.次に、 Microsoftのドキュメントを調べました。この例でDefaultExtは、も指定されていません.

DefaultExtで指定されている場合.FileDialogはフィルターの最初の拡張子を自動的に選択します。

DefaultExt。なしで拡張子に設定する必要があります.
つまり、あなたの例では、次のように変更するdlg.DefaultExt = ".bmp";必要があります...".bmp""bmp"

于 2020-09-25T18:31:16.780 に答える
1

APIによって説明は異なりますが、同じように機能するようです。 DefaultExtユーザーが拡張子のないファイル名を選択し、選択されたフィルターがのようなワイルドカードフィルターである(*.*)場合に使用されます。

System.Windows.Forms.FileDialog.DefaultExt(MSDN):

アプリケーションのユーザーが拡張子なしのファイル名を指定すると、FileDialogはファイル名に拡張子を追加します。使用される拡張子は、FilterプロパティとDefaultExtプロパティによって決定されます。FileDialogでフィルターが選択されていて、フィルターが拡張子を指定している場合、その拡張子が使用されます。選択したフィルターが拡張子の代わりにワイルドカードを使用する場合、DefaultExtプロパティで指定された拡張子が使用されます。

Microsoft.Win32.FileDialog.DefaultExt(MSDN):

デフォルトでは、AddExtensionプロパティは、表示されたファイルリストをFilterプロパティからフィルタリングする拡張子を決定しようとします。Filterプロパティから拡張子を判別できない場合は、代わりにDefaultExtが使用されます。

于 2019-12-10T18:18:21.213 に答える