是否可以在Windows控制台应用程序中具有保存文件对话框()
本文关键字:保存文件 对话框 应用程序 Windows 控制台 是否 | 更新日期: 2023-09-27 18:27:05
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 窗体应用。删除它创建的默认表单。打开程序.cs并删除尝试创建窗口的代码,并将其替换为控制台应用代码。
现在的诀窍是您需要手动创建控制台。您可以使用以下帮助程序类执行此操作:
public class ConsoleHelper
{
/// <summary>
/// Allocates a new console for current process.
/// </summary>
[DllImport("kernel32.dll")]
public static extern Boolean AllocConsole();
/// <summary>
/// Frees the console.
/// </summary>
[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的引用。然后调用命名空间"using System.Windows.Forms">(不带引号(并创建SaveFileDialog Class的对象。