子表单找不到文本文件

问题描述 投票:4回答:1

我创建了一个布尔代数简化器。它简化了表达式,我很满意。但是,我试图添加一个功能,允许用户检查两个表达式是否相同。为此,我创建了一个新表单,允许用户通过单击按钮输入两个表达式。为此,我认为最好简化两个表达式,然后比较两者的等效性。由于我有很多子例程和代码可以用于另一种形式的简化,我认为使用代码输入表单的子表单将允许我调用子例程而不是将它们复制到表单上。我已经以父表格保护了这些。我继承了这样:

public partial class Expression_Equivalency_Form : Expression_Simplifier

但是,当我单击表单设计器时,会出现此错误,我无法查看表单的图形界面:

“找不到文件文件路径”

该文件位于debug文件夹中,该文件夹位于包含该程序的文件夹中的bin文件夹中,并在父类中重新显示。该文件由父表单读取和附加,没有问题。我试图研究这个,但一直无法找到解决方案。有人知道吗?

我已阅读该文件并附加到其中。我还使用以下代码从我的文本文件中删除任何空行:

File.WriteAllLines("PreviousExpressionInputs.txt", 
  File.ReadAllLines("PreviousExpressionInputs.txt").Where(l => !string.IsNullOrWhiteSpace(l)));

写入文件的代码:

using (BinaryWriter Writer = new BinaryWriter(File.Open("PreviousExpressionInputs.txt", 
    FileMode.Append)))
{
    Writer.Write(expressionandanswertowritetotextfile);                    
}

从文件中读取的代码:

foreach (string line in File.ReadLines("PreviousExpressionInputs.txt"))
{
    try
    {
        LinesInFile.Add(line);
    }
    catch (Exception)
    {
    }
}
c# .net winforms windows-forms-designer
1个回答
1
投票

考虑以下事实:

  • 在设计模式下打开表单时,其基类的构造函数将运行。
  • 查找相对文件名时,将相对于应用程序的当前工作目录解析路径。
  • 当表单处于设计模式时,当前应用程序是Visual Studio,其工作目录是devenv.exe所在的位置。

它描述了为什么找不到文本文件。因为您在基本表单的构造函数(或基本表单的fir示例加载事件处理程序)中有一些代码,它们查找文件并且因为文件名是相对的,所以它在Visual Studio工作目录中查找文件而不能找到文件。

如何预防这个问题?检查DesignMode属性以防止运行代码:

public partial class MyBaseForm : Form
{
    public MyBaseForm()
    {
        InitializeComponent();
    }

    private void MyBaseForm_Load(object sender, EventArgs e)
    {
        MessageBox.Show("This will show both in run-time and design time.");

        if (!DesignMode)
            MessageBox.Show("This will show just in run-time");
    }
}

创建派生表单并在设计器中打开它以查看发生的情况:

public partial class Form1 : MyBaseForm
{
    public Form1()
    {
        InitializeComponent();
    }
}

要了解有关设计师工作原理的更多信息,请查看this post

© www.soinside.com 2019 - 2024. All rights reserved.