子窗体找不到文本文件

时间:2019-02-22 22:51:38

标签: c# .net winforms windows-forms-designer

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

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)
    {
    }
}

1 个答案:

答案 0 :(得分: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