2013-05-10 204 views
1

在编程方面,我仍然是初学者,这是一个我遵循C#教程的小型应用程序。在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); 
     } 

没有办法理解这些类型情况下的错误。编码这样的应用程序的具体顺序是什么?

+1

“它抛出我一个错误”:它是为读者,如果你指定非常有帮助* *什么错误。通常它会给出一个很好的问题暗示。 – 2013-05-10 07:12:19

+0

我的不好。编辑该问题并包含错误消息。 – scylla 2013-05-10 07:17:53

回答

2

好吧,这个想法很简单,你不能使用一个未被初始化的变量。 在你的情况sm事情正在发生。 在你的第一个代码中openfile = openfd.FileName;在显示出来之后正在执行。因此文件名称正确。 但是在第二个openfile = openfd.FileName;在显示dilogue之前就已经初始化了。由于没有对话,因此名称为空,因此会给出错误。

注意。我没有以技术方式使用初始化的词。

1

我打算继续前进,猜测问题是if块之外的openfd.FileName调用(也在其检索之前),而if块仍在执行时,openfd是“保持打开”如果你喜欢,那么你可以检索它的结果。

当你离开时,如果块,你实际上是说你用这个对话框完成的,请继续。

在您的代码中,您显示的多个对话框也可以通过多个调用来显示对话框,请考虑以下事项。

if (openfd.ShowDialog() == DialogResult.OK) 
    { 
     pictureBox1.Image = Image.FromFile(openfd.FileName); 
    } 
    else 
    { 
     MessageBox.Show("Operation canceled"); 
    } 

(改为使用dialogresult.ok,因为这是很可能,你希望从该对话框中收到的结果更多)

更新

对于您目前的applcation,每次通话ShowDialog()打开一个新的对话框。考虑类似

MessageBox.Show("woo"); 
MessageBox.Show("hoo"); 
在上面,当第一个消息框关闭时,它会关闭对话框,然后移动到处理第二个消息框(的下一行代码),用你的

if (openfd.ShowDialog() != DialogResult.Cancel) 

您的showdialog仍在使用if语句,因此它被视为仍在使用中,并且没有立即处理。当if语句结束时,您的对话框将被视为可以处理

另外,应用程序中的错误与文件名路径无关,它试图加载一个没有名称的文件

+0

你能否根据给定的应用来描述它。 – scylla 2013-05-10 07:20:41

+0

我已经为此更新了我的答案,希望它对帮助 – Sayse 2013-05-10 07:41:05

1

线openedfile = openfd.FileName;不会绑定两个变量,它会复制openfd.FileName在这一刻openedfile值。

在第二个例子中,用户尚未选择在那一刻文件,所以这个值仍是空的("")。稍后在openfd中选择的值将被忽略。

编辑这就是为什么你会得到错误Empty path name is not legal

+0

+1有帮助 – Sayse 2013-05-10 08:17:43

0

我一般喜欢这样的:

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!!"); 
    } 

} 
+0

谢谢!真的很感激它。 – scylla 2013-05-10 09:58:00

相关问题