0

私のアプリケーションでは、1つのフォームがあります。ボタンを押してそのフォームの新しいインスタンスを開くと、次のコードが表示されます(これは最初のアプリケーションの起動時にも実行されます)。

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時間。

ありがとうございました。

-編集-これが私がやりたかったことの極端な単純化です。

ユーザーがフォーム1の2つのインスタンスを開いてから、それらを閉じた場合。それぞれを開くと、両方のフォームに最後のクローズからのデータが保存されているはずです

--編集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
        Form1 newForm = new Form1();
        newForm.Show();
        newForm.Text = "Notables " + x.ToString();

新しいインスタンスを呼び出すときは、別のメソッドを呼び出すだけでその作業を実行できます。最初のインスタンスからデータを保存する必要がある場合は、アプリケーション全体のオブジェクトまたは静的変数に保存します。

于 2012-07-20T06:48:39.753 に答える
0

デバッガーでコードを実行し、コードをステップ実行して、コードが何をしているのかを確認します。

問題は、Textプロパティをロードするファイルの名前に設定する前にフォームを開くことであると思われます。そのため、Load()メソッドは無効なファイル名を生成し、空のelse {}ブロックを実行します。

于 2012-07-21T08:36:38.750 に答える
0

問題は、フォームがフォーム1として開かれ、特定のテキストに変更されていたことです。そして、これら2つのプロセスの間に、残りのアプリケーションはコードの最初の部分を実行できませんでした。プログラムでテキストを変更した後、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 に答える