是否可以在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类的对象。