是否可以在Windows控制台应用程序中使用savefiledialog()

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Diagnostics { class Program { static void Main(string[] args) { string filename = null; using (SaveFileDialog sFile = new SaveFileDialog()) { sFile.Filter = "Text (Tab delimited)(*.txt)|*.txt|CSV (Comma separated)(*.csv)|*.csv"; if (sFile.ShowDialog() == DialogResult.OK) { filename = sFile.FileName; WriteRegKey(diagnostic, filename); } } } } } 

我收到一个错误:无法找到类型或命名空间名称’SaveFileDialog’(您是否缺少using指令或程序集引用?)

我确实尝试添加System.Windows.Forms命名空间,但我无法。

您必须添加对System.Windows.Forms程序集的引用。

此外,您必须将STAThread属性添加到应用程序入口点方法。

 [STAThread] private static void Main(string[] args) { using (SaveFileDialog sFile = new SaveFileDialog()) { sFile.ShowDialog(); } Console.ReadKey(); } 

但老实说,这是一个糟糕的主意。 控制台应用程序不应具有控制台本身的任何其他UI。 正如SaveFileDialog的命名空间所示, SaveFileDialog应仅用于Forms

您可能会发现更容易扭转问题,并使用控制台安装Windows窗体应用程序。 为此,请在Visual Studio中创建Windows窗体应用程序。 删除它创建的默认表单。 打开program.cs并删除尝试创建窗口的代码并将其替换为您的控制台应用程序代码。

现在的诀窍是你需要手动创建控制台。 您可以使用此帮助程序类执行此操作:

 public class ConsoleHelper { ///  /// Allocates a new console for current process. ///  [DllImport("kernel32.dll")] public static extern Boolean AllocConsole(); ///  /// Frees the console. ///  [DllImport("kernel32.dll")] public static extern Boolean FreeConsole(); } 

现在在你的程序开始时(在你尝试和Console.Writeline之前)调用

 ConsoleHelper.AllocConsole(); 

并在你的程序调用结束时

 ConsoleHelper.FreeConsole(); 

现在您有一个可以创建WinForms对话框的控制台应用程序,包括SaveFileDialog。

您需要将System.Windows.Forms的引用添加到项目本身,而不是源文件。 右键单击解决方案资源管理器工具箱中的项目图标,然后选择“添加引用”。

尚未将命名空间System.Windows.Forms导入到代码中。

您需要从“添加引用”对话框添加对System.Windows.Forms 的引用 。 然后使用System.Windows.Forms (不带引号)调用命名空间,并创建SaveFileDialog类的对象。