在编程时我还是初学者,这是我在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);
}
是否有办法理解这些类型情况下的错误。编写这样的应用程序的具体顺序是什么?
答案 0 :(得分:2)
嗯,这个想法很简单,你不能使用一个未初始化的变量。 在你的情况下sm事情正在发生。 在你的第一个代码中openfile = openfd.FileName;正在显示拨号码后正在执行。因此文件名正确。 但是在第二个openfile = openfd.FileName;在稀释器出现之前,它已经被初始化了。由于没有对话,名称为空,因此它会出错。
请注意。我没有用tecnical方式使用初始化的单词。
答案 1 :(得分:1)
我要继续猜测问题是if
块之外的openfd.FileName调用(也是在它被检索之前),而if块仍在被执行,openfd是“如果你愿意,可以保持打开状态,这样你就可以检索它的结果。
当你离开if块时,你实际上已经说完了这个对话框,请继续。
在您的代码中,您显示多个对话框,其中还有多个调用以显示对话框,请考虑以下内容。
if (openfd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openfd.FileName);
}
else
{
MessageBox.Show("Operation canceled");
}
(更改为使用dialogresult.ok,因为这很可能是您希望从对话框中收到的结果)
<强>更新强>
关于您当前的应用程序,每次调用ShowDialog()都会打开一个新对话框。考虑它类似于
MessageBox.Show("woo");
MessageBox.Show("hoo");
在上面,当第一个消息框关闭时,它将关闭对话框并转到处理第二个消息框(下一行代码),并带有
if (openfd.ShowDialog() != DialogResult.Cancel)
你的showdialog仍被if语句使用,因此它被认为仍在使用中,不会立即处理掉。当if语句结束时,您的对话将被视为可以处置
此外,您的应用程序中的错误与文件名路径无关,它试图加载没有名称的文件
答案 2 :(得分:1)
行openedfile = openfd.FileName;
不会绑定这两个变量,它会复制 openfd.FileName
此时 的值<{1> }}。
在您的第二个示例中,用户当时尚未选择文件,因此该值仍为空(openedfile
)。稍后在""
中选择的值将被忽略。
编辑这就是您收到错误openfd
。
答案 3 :(得分: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!!");
}
}