Form2关闭时Form1执行方法不起作用

时间:2017-06-30 11:39:42

标签: c# winforms visual-studio frame

我目前正在使用VS社区2017编写一个C#应用程序来计算和组织汽油产品(汽车,每100公里多少升等)。
我有两个框架,一个用于显示所有数据的概览,另一个用于输入新数据。当有人输入新数据时,我想在第1帧刷新。因此,我有一个方法,用文件中的内容更改标签的文本,其中包含所有数据 所以我的问题似乎与this问题类似,但不知何故标签的文本没有改变。我也试过了this但也在这里,标签文字不会改变。我没有得到任何错误,所以我不能提供这个,但我认为solution1不起作用,因为我不使用简单的框架我使用另一个已经存在的框架的实例。
以下是代码中最重要的部分:

帧1:

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TankCheck_PC_Edition
{
    public partial class f_StartTC : Form
    {
        string path = Directory.GetCurrentDirectory();
        public f_StartTC()
        {
            InitializeComponent();
            Reload();
        }

        public void Reload()
        {
            path += "DataTC.txt";
            try { lbl_test.Text = File.ReadAllText(path); } catch (Exception ex) { }
        }

        ....

        private void cmd_add_Click(object sender, EventArgs e)
        {
            Input_TC.f_Input Frame2 = new Input_TC.f_Input();
            Frame2.Closed += delegate
            {
                Reload();
            };
            Frame2.Show();
            Frame2.FormClosed += new FormClosedEventHandler(Frame2_FormClosed);      
        }

        void Frame2_FormClosed(object sender, FormClosedEventArgs e)
        {
            Reload();
        }
    }
}

式2:

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Input_TC
{
    public partial class f_Input : Form
    {
        long Tacho = 0;
        double km=0, price=0, tanked = 0;
        string path = Directory.GetCurrentDirectory()+ "DataTC.txt";

        public f_Input()
        {
            InitializeComponent();
        }

        private void cmd_Save_Click(object sender, EventArgs e)
        {
            ...

            if(!File.Exists(path))
                File.WriteAllText(path, output);
            else
                File.AppendAllText(path, output);

            TankCheck_PC_Edition.f_StartTC Test = new TankCheck_PC_Edition.f_StartTC();

            Test.Reload();

            Close();
        }
    }
}

其中“...”是不重要的代码被跳过。
谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您多次调用Reload方法,但path变量仅在第一次调用函数时有效。每次下次更改变量时,路径无效并发生异常。

你可以解决这个问题:

public void Reload()
{
    var fullPath = path + "DataTC.txt";
    try { lbl_test.Text = File.ReadAllText(fullPath); } catch (Exception ex) { }
}