【问题标题】:How to open a file with the default CSV editor in Windows Forms?如何在 Windows 窗体中使用默认 CSV 编辑器打开文件?
【发布时间】:2021-09-22 23:28:10
【问题描述】:

我正在开发一个使用 Windows 窗体进行设计的备份程序。
除了一个按钮外,一切都运行良好,所以我将保留整个代码。
我有一个按钮,允许用户从某个位置打开 CSV 文件以在其默认的 CSV 编辑器程序(即 Excel、Libre 等)中进行编辑,并且该按钮可以正常工作:

private: System::Void button17_Click(System::Object^ sender, System::EventArgs^ e) {
String^ CSVLoc = textBox1->Text;
string CSVLoc1 = msclr::interop::marshal_as<std::string>(CSVLoc);
system(("start " + CSVLoc1 + "\\SystemIPs.csv").c_str());
}

但是,我想避免使用 system 功能,因为我不喜欢它在启动默认编辑器程序时会闪烁命令窗口。

我试过了:

private: System::Void button17_Click(System::Object^ sender, System::EventArgs^ e) {
String^ CSVLoc = textBox1->Text;
string CSVLoc1 = msclr::interop::marshal_as<std::string>(CSVLoc);
WinExec(("start " + CSVLoc1 + "\\SystemIPs.csv").c_str(), SW_HIDE);
}

但是当我单击按钮时,它什么也没做。
WinExec 可以替代我的其他系统功能命令,但不是在这里。

按钮的功能是不对我的程序进行任何编辑,因此不需要读取或写入它。只需要在默认编辑器中打开而不弹出命令窗口即可。

我已经搜索了几个小时试图找到一个没有运气的解决方案。
我对这里的任何建议持开放态度,即使它正在使用系统功能,但有一些我目前不知道的巧妙隐藏方式。

该程序仅适用于 Windows,并设置为作为 Windows 应用程序运行。使用 CLR 和 .Net 是 4.7.2。正如我提到的,一切正常,只是想找到一种方法来隐藏那个讨厌的命令窗口弹出窗口。

【问题讨论】:

  • String^ csvLoc = textBox1-&gt;Text; Process::Start(Path::Combine(csvLoc, "SystemIPs.csv")); -- 您应该指定正在使用的 .Net 版本。
  • 您还可以看到:Launching Applications (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)(这里使用了什么引擎盖)。
  • Jimi,Process::Start 似乎未定义。我按照链接中的示例尝试了 ShellExecute,它拒绝了我的动词“open”,并且我的文件路径声明“类型的参数“const char *”与动词和路径的参数类型不兼容。
  • Process 类是 System::Diagnostics 的一部分,所以添加 using namespace System::Diagnostics;。 Path 类需要using namespace System::IO;。全部来自默认添加到项目引用中的mscorlib.dll 程序集。
  • 嘿 Jimi,正如我在对 Jack 的评论中所说,它运行良好。感谢您的帮助并教会了我一些新东西。

标签: windows visual-studio winforms csv c++-cli


【解决方案1】:

正如 Jimi 所说,您可以使用 Process.Start 方法使用默认编辑器打开一个 csv 文件。

首先,请添加命名空间引用。

using namespace System::Diagnostics;

其次,你可以试试下面的代码打开它。

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
        String^ str = textBox1->Text;
        Process::Start(str);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2013-02-28
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多