1

所以我一直在努力在我的 .NET 应用程序中创建一个“保存”按钮。根据我的研究,我似乎做的一切都是正确的。我一直将这篇文章作为主要来源:http: //msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.aspx

以下是我在 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 框架内。所以,我被困住了。任何帮助,将不胜感激。

4

3 回答 3

3

正如前两张海报所提到的,您不能在 Stream 类上调用 new 因为它是抽象的,这是您的代码的编译版本以供参考

    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() {} 块中,以确保正确处理它们

于 2011-06-20T02:46:40.613 回答
0

问题是Stream一个抽象类,因此不能像您Stream stream = new Stream();将那条线更改为那样构造Stream stream;,它应该可以工作。

于 2011-06-20T01:53:57.423 回答
0

Stream类是抽象的,你试图在第 1 行创建一个实例。你实际上并没有使用在那里创建的对象,所以要么不要在声明中为它分配任何东西,要么分配null给它.

于 2011-06-20T01:52:18.530 回答