0

在我的申请中,我有一个表格。当按下按钮打开该表单的新实例时,我有以下代码(这也在第一次应用程序启动时运行):

private void Form1_Load(object sender, EventArgs e)
        {
            if (File.Exists(@"C:\Users\Vlad\Documents\" + this.Text.ToString() +"_Settings_Save.rtf"))
            {
                try
                {
                    richTextBox2.LoadFile(@"C:\Users\Vlad\Documents\" + this.Text.ToString() + "_Settings_Save.rtf", RichTextBoxStreamType.RichText);
                    richTextBox1.LoadFile(richTextBox2.Text + @"\" + this.Text.ToString() + "_Save_File.rtf", RichTextBoxStreamType.RichText);                       
                }
                catch
                {

                }
            }
            else if (File.Exists(@"C:\Users\Vlad\Documents\" + this.Text.ToString() + "_Settings.txt"))
            {
                richTextBox2.LoadFile(@"C:\Users\Vlad\Documents\" + this.Text.ToString() + "_Settings.txt");
                richTextBox1.LoadFile(richTextBox2.Text + @"\" + this.Text.ToString() + "_TestSave.txt");
            }
            else
            {
            }
        }

private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {

            double n = Application.OpenForms.Count;
            double x = n + 1;
            Form1 newForm = new Form1();
            newForm.Show();
            newForm.Text = "Notables " + x.ToString();

        }

我希望当打开一个新实例时,新表单会执行 form1_load 事件并加载该文件。

此应用程序旨在节省通用性。这意味着,您可以根据需要打开和关闭任意数量的实例,并且在每个实例中,都会有与关闭实例之前相同的文本。

如果这令人困惑,我深表歉意。

我现在该走了,明天早上我会回答所有问题。从现在开始大约 6 小时。

谢谢你。

--EDIT-- 这是我想做的事情的极端简化。

如果用户打开表单 1. 的两个实例,然后关闭它们。打开每个表单后,两个表单都应该保存上次关闭时的数据

--EDIT 2-- 现在,这里是对正在发生的事情的简化。

该应用程序确实可以正确保存,但是新实例不会打开正确的文件。他们只是打开与第一个实例相同的文件。但保存文件是正确的。

4

4 回答 4

0

我假设该文件存在。由于某些异常,它可能没有被加载,并且您看不到它,因为您有一个空的 catch 块:

try 
{ 
    richTextBox2.LoadFile(@"C:\Users\Vlad\Documents\" + this.Text.ToString() + "_Settings_Save.rtf", RichTextBoxStreamType.RichText); 
    richTextBox1.LoadFile(richTextBox2.Text + @"\" + this.Text.ToString() + "_Save_File.rtf", RichTextBoxStreamType.RichText);                        
} 
catch 
{ 

} 

捕获异常并通知用户,而不是:

catch (Exception exception)
{
    NotifyUser(exception);
}

通知用户可以引发消息框,或写入日志文件,或两者兼而有之。

此外,如果文件不存在,您可以引发异常或调用 NotifyUser 来提醒用户(即,此时,您是开发人员)该事实:

else
{
    NotifyUser("File not found: " + fileName);
}
于 2012-07-20T06:45:14.557 回答
0

在调试器下运行您的代码,并单步执行它以查看它在做什么。

我怀疑问题是您在将 Text 属性设置为要加载的文件的名称之前else {}打开了表单,因此 Load() 方法会生成无效的文件名并因此执行空块。

于 2012-07-21T08:36:38.750 回答
0

好的,所以问题是表单作为表单 1 打开,然后更改为特定文本。在这两个进程之间,我的应用程序的其余部分无法运行我的代码的第一部分。我通过在以编程方式更改其文本后切换 Form.Show() 来解决此问题。

private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {

            double n = Application.OpenForms.Count;
            double x = n + 1;
            Form1 newForm = new Form1();
            newForm.Text = "Notables " + x.ToString();
            newForm.Show();
        }
于 2012-07-21T08:40:57.593 回答
0
        Form1 newForm = new Form1();
        newForm.Show();
        newForm.Text = "Notables " + x.ToString();

当您调用一个新实例时,只需调用另一个方法来为您完成这项工作。如果您需要从第一个实例中保存一些数据,请将其保存在应用程序范围的对象或静态变量中。

于 2012-07-20T06:48:39.753 回答