2017-02-23 57 views
1

當我選擇文件名「image.mgm」對話框System.Windows.Forms.SaveFileDialog 出奇增加了擴展.BMP,並通過產權文件名返回「image.mgm.BMP」。 它不會發生「image.png」。SaveFileDialog令人驚訝的增加擴展到文件

幾個樣品:

  • image.bmp ==> image.bmp
  • image.png ==> image.png
  • image.mgm ==>image.mgm.BMP
  • image.MGM ==> image.MGM

如何解決意外(對我來說)的行爲嗎? https://github.com/constructor-igor/TechSugar/tree/master/WinForm/FileSaveDialogIssue/FileSaveDialogIssue

UPD額外的事實:樣品

來源可在github上發現當我添加鍵「HKEY_CLASSES_ROOT.mgm」註冊表「文件對話框」停止的添加「.BMP」到.mgm

 public Form1() 
    { 
     InitializeComponent(); 
     this.saveFileDialog.AddExtension = false; 
    } 

    private void btnOpenFile_Click(object sender, EventArgs e) 
    { 
     saveFileDialog.Title = @"Save calculated image"; 
     saveFileDialog.FileName = "noname.tiff"; 
     saveFileDialog.Filter = @"My Files(*.BMP;*.MGM;*.PNG)|*.BMP;*.MGM;*.PNG|All files (*.*)|*.*"; 
     if (saveFileDialog.ShowDialog(this) == DialogResult.OK) 
     { 
      MessageBox.Show(String.Format("File name {0}", saveFileDialog.FileName)); 
     } 
    } 
+0

您是否在對話框中選擇了「所有文件」過濾器?如果不是,請在按保存按鈕之前嘗試。 – Sylence

+0

「所有文件」過濾器沒有問題,但我不明白「我的文件」過濾器有什麼問題。 – constructor

+0

哦......我沒有意識到.mgm是「我的文件」過濾器的一部分。你確定「bmp」和「png」(小寫)有效嗎? – Sylence

回答

0

你必須使用非大寫字母定義文件掩碼時

saveFileDialog.Filter = @"My Files(*.BMP;*.MGM;*.PNG)|*.bmp;*.mgm;*.png|All files (*.*)|*.*"; 

這將不是「1.mgm」或「1.MGM」


不過工作,「1.mGm」和「1.MgM」將無法正常工作,可通過增加固定「 * .mGm「掩碼(只是這個修復了這兩種情況)。

但是,你仍然有問題與「1.Mgm」..嘆氣。

"*.mgm;*.mGm;*.Mgm;*.mgM;" 
+0

好的,我同意,可以實現不同的工作,但我想了解這個問題。似乎,對話框爲未知擴展添加了第一個來自過濾器的擴展。當我選擇「1.exe」時,它不會添加「.BMP」,但是當我選擇「1.exec」時,它會添加 – constructor

+0

我也很好奇什麼是錯誤的,爲什麼它仍然會添加擴展忽略顯式指定的AddExtension = false '。 – Sinatr

+0

[設置屬性](https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/FileDialog.cs,bd498fa26976958b)和[檢查其值](https:// referencesource .microsoft.com /#System.Windows.Forms/winforms/Managed/System/WinForms/FileDialog.cs,7aeec959d11b6f08)似乎對我好,它不應該添加**任何**到文件名。 – Sinatr

相關問題