2011-06-20 12 views
1

所以我一直在努力在我的.NET應用程序中創建一個「保存」按鈕。根據我的研究,我似乎正在做一切正確的事情。我已經提到這篇文章作爲主要來源:http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.aspx在C#/ .NET中使用SaveFileDialog生成「無法創建抽象類的實例」錯誤

下面是在C#中我的方法的代碼:

private void save2(object A_0, EventArgs A_1) 
{ 
    Stream stream = new Stream(); 
    savefile2 = new SaveFileDialog(); 
    savefile2.InitialDirectory = @"C:\Program Files\Folder\"; 
    savefile2.Filter = "Text files (*.txt)|*.txt|Word files (*.doc)|*.doc"; 
    savefile2.FilterIndex = 1; 
    savefile2.FileName = "*.txt"; 
    savefile2.Title = "Save Box Text"; 
    savefile2.OverwritePrompt = true; 
    if (savefile2.ShowDialog() == DialogResult.OK) 
    { 
     stream = savefile2.OpenFile(); 
     if (stream != null) 
     { 
      stream.Close(); 
     } 
    } 
} 

運行程序時,我點擊「保存」按鈕,看它是否會打開一個對話框,它會產生以下錯誤:

「無法創建抽象類的實例。」

但是,我沒有使用任何抽象類。所有的類都在.NET框架中。所以,我卡住了。任何幫助,將不勝感激。

回答

0

Stream這個類是抽象的,你試圖創建一個第1行的實例。你實際上並沒有使用在那裏創建的對象,所以只要在聲明中不要指定任何東西,或將null分配給它。

0

問題是Stream是一個抽象類,因此不能像您使用Stream stream = new Stream();更改該行Stream stream;,它應該工作。

3

正如由以前的兩張海報中提到你不能說在Stream類新的,因爲它是抽象的,這裏是你的代碼的編譯版本以供參考

private SaveFileDialog savefile2; 
    private void save2(object A_0, EventArgs A_1) 
    { 
     savefile2 = new SaveFileDialog 
         { 
          InitialDirectory = @"C:\Program Files\Folder\", 
          Filter = "Text files (*.txt)|*.txt|Word files (*.doc)|*.doc", 
          FilterIndex = 1, 
          FileName = "*.txt", 
          Title = "Save Box Text", 
          OverwritePrompt = true 
         }; 
     if (savefile2.ShowDialog() == DialogResult.OK) 
     { 
      using (FileStream stream = File.Open(savefile2.FileName, FileMode.OpenOrCreate)) 
      { 
       //do stuff 
      } 
     } 
    } 

注意它的包裝是個好主意你的流實例化在using(){}塊中,以確保它們被妥善處置

相關問題