在c#应用中打开文本文件
本文关键字:文本 文件 应用 | 更新日期: 2023-09-27 18:13:10
在编程方面,我仍然是一个初学者,这是我按照c#教程做的一个小应用程序。
private void viewImagesToolStripMenuItem_Click(object sender, EventArgs e)
{
string openedfile = "";
openfd.Title = "Insert a text file";
openfd.InitialDirectory = "C:";
openfd.FileName = "";
openfd.Filter = "text files|*.txt|word documents|*.doc|allfiles|*.*";
if (openfd.ShowDialog() == DialogResult.Cancel)
{
MessageBox.Show("Operation canceled");
}
if (openfd.ShowDialog() != DialogResult.Cancel)
{
openedfile = openfd.FileName;
richTextBox1.LoadFile(openedfile,RichTextBoxStreamType.PlainText);
}
当我这样做的时候,我注意到,如果我改变相同的应用程序的代码顺序只有2行-
string openedfile = "";
openedfile = openfd.FileName;
在调试时,它会抛出这样的错误-空路径名不合法。 private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
openfd.Title = "Insert a text file";
openfd.InitialDirectory = "C:";
openfd.FileName = "";
openfd.Filter = "text files|*.txt|word documents|*.doc|allfiles|*.*";
**string openedfile = "";
openedfile = openfd.FileName;**
if (openfd.ShowDialog() == DialogResult.Cancel)
{
MessageBox.Show("Operation canceled");
}
if (openfd.ShowDialog() != DialogResult.Cancel)
{
richTextBox1.LoadFile(openedfile,RichTextBoxStreamType.PlainText);
}
难道没有办法理解这些类型情况下的错误吗?像这样编写应用程序的具体顺序是什么?
思路很简单您不能使用未初始化的变量。在你的例子中,同样的事情也在发生。在你的第一个代码openedfile = openfd.FileName;在显示对话框后执行。因此文件名是正确的。但是在第二个文件中openedfile = openfd.FileName;在对话框显示之前被初始化。由于没有对话框,名称为空,因此给出错误。
。
行openedfile = openfd.FileName;
不会绑定这两个变量,它将将openfd.FileName
此时的值复制到openedfile
中。
在第二个示例中,用户当时还没有选择文件,因此该值仍然为空(""
)。之后在openfd
中选择的值将被忽略。
EDIT这就是为什么你得到错误Empty path name is not legal
我猜问题出在openfd。在if
块之外调用FileName(也在它被检索之前),当if块仍在执行时,如果您愿意,openfd是"保持打开"的,因此您可以检索其结果。
当你离开if块时,你实际上是在说你已经完成了这个对话框,请继续。
在你的代码中,你要用多个调用来显示对话框,考虑如下:
if (openfd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openfd.FileName);
}
else
{
MessageBox.Show("Operation canceled");
}
(更改为使用对话结果。好的,因为这很可能是您希望从对话框中收到的结果)
对于当前的应用程序,每次调用ShowDialog()都会打开一个新的对话框。可以把它看作类似于
MessageBox.Show("woo");
MessageBox.Show("hoo");
在上面的中,当第一个消息框关闭时,它将关闭对话框并继续处理第二个消息框(下一行代码),使用
if (openfd.ShowDialog() != DialogResult.Cancel)
你的showdialog仍然被if语句使用,所以它被认为仍然在使用,而不是立即处理。当if语句结束时,您的对话框将被认为可以处理
。同样,应用程序中的错误与文件名路径无关,它试图加载一个没有名称的文件我一般更喜欢这个:
private void viewImagesToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult dr=openfd.ShowDialog();
if(dr==DialogResult.Ok)
{
richTextBox1.LoadFile(openfd.FileName,RichTextBoxStreamType.PlainText);
}
else
{
MessageBox.Show("No file Selected!!");
}
}