2011-06-20 9 views
1

.NETアプリケーションで「保存」ボタンを作成するのに苦労しています。私は私の研究によれば、すべて正しく行っているようです。私は、主な情報源として、この記事を参照されています:http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.aspxC#/。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

としては、前回の2枚のポスターが言及したが、ここではそれがラップすることをお勧めしますことを参照

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(){}ブロックで正しく配置されていることを確認する

関連する問題