我在WinForms中开发了一个文本编辑器。您可以从here下载并使用它。它工作正常。但是,当我在Windows资源管理器中右键单击文本文件并尝试打开它时,它不会显示它。
我在网上搜索了解决方案,但失败了。你能建议解决这个问题。
或者我应该使用RichTextBox。
我还尝试使用RichTextBox
创建一个简单的测试项目,并使用LoadFile()
。
// Load the contents of the file into the RichTextBox.
richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.RichText);
这导致文件格式错误。
答案 0 :(得分:1)
问题是使用:
richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.RichText);
您必须选择Rich Text Format (RTF)文件,因此加载普通文本文件会导致文件格式错误(ArgumentException)。所以你可以用这种方式加载它:
string[] lines = System.IO.File.ReadAllLines(openFile1.FileName);
richTextBox1.Lines = lines;
答案 1 :(得分:1)
好的,根据您的评论和提供的代码,它不会从Windows打开文件。
当Windows向程序发送文件以打开它时,它将它作为第一个参数发送给exe,例如, notepad.exe C:\Users\Sean\Desktop\FileToOpen.txt
。
您需要使用Environment.CommandLine
或Environment.GetCommandLineArgs()
来获取参数。
有关详细信息,请参阅此处:How do I pass command-line arguments to a WinForms application?
我会在你的表单的Load
事件中处理这个并将参数传递给你的函数:
string filename = Environment.GetCommandLineArgs()[0];
richTextBox1.LoadFile(filename, RichTextBoxStreamType.RichText);
答案 2 :(得分:1)
我刚刚解决了这个问题。谢谢你的帮助。
我正在为面临类似问题的未来帮助添加答案。
这是解决方案:
从Form_Load()调用以下方法:
public void LoadFileFromExplorer()
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length > 1)
{
string filename1 = Environment.GetCommandLineArgs()[1];
richTextBox1.LoadFile(filename1, RichTextBoxStreamType.PlainText);
}
}
要使其工作,请更改Main():
static void Main(String[] args)
{
if (args.Length > 0)
{
// run as windows app
Application.EnableVisualStyles();
Application.Run(new Form1());
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}