1

メモ帳プログラムを作成していますが、問題があります。私のNewボタンには、次のコードがあります。

private void New()
    {
        if (us == true)
        {
            DialogResult dr = MessageBox.Show("Do you want to save changes to: " + filepath, "Save Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
            if (dr == DialogResult.Yes)
                Save();
            else if (dr == DialogResult.No)
            {
                filename = null;
                undoToolStripMenuItem.Enabled = false;
                undoToolStripMenuItem1.Enabled = false;
                redoToolStripMenuItem.Enabled = false;
                redoToolStripMenuItem1.Enabled = false;
                us = false;
                Form1.ActiveForm.Text = "Untitled - PadNotePro";
                richTextBox1.Clear();
            }
            else if (dr == DialogResult.Cancel)
                Close();
        }
        else
        {
            filename = null;
            undoToolStripMenuItem.Enabled = false;
            undoToolStripMenuItem1.Enabled = false;
            redoToolStripMenuItem.Enabled = false;
            redoToolStripMenuItem1.Enabled = false;
            Form1.ActiveForm.Text = "Untitled - PadNotePro";
            richTextBox1.Clear();
        }
    }

us保存されていないことを意味し、保存されているかどうかを確認します。us = true の場合、保存されていません。

[いいえ] をクリックすると、次のDialogBoxコードが実行されます。

else if (dr == DialogResult.No)
            {
                filename = null;
                undoToolStripMenuItem.Enabled = false;
                undoToolStripMenuItem1.Enabled = false;
                redoToolStripMenuItem.Enabled = false;
                redoToolStripMenuItem1.Enabled = false;
                us = false;
                Form1.ActiveForm.Text = "Untitled - PadNotePro";
                richTextBox1.Clear();
            }

私が問題を抱えているのは、:Form1.ActiveForm.Text = "Untitled - PadNotePro";です。そのコード行をスキップしているようです。と関係があると思いますが、わかりMessageBoxません。誰かが理由を知っていますか?

Form編集:当時アクティブでなかったことに関係があるのではないかと思います。

4

3 に答える 3

1

私は自分の問題を自分で理解しました。Formのコードで のコードを実行することはできませんMessageBox。を使用する必要がありBackgroundWorkerます。参考までに、私が使用したコードは次のとおりです。

BackgroundWorker changeformtext = new BackgroundWorker();
public Form1()
{
    InitializeComponent();
    changeformtext.DoWork += changeformtext_DoWork;
}
void changeformtext_DoWork(object sender, DoWorkEventArgs e)
{
    Invoke(new Action(doit));
}
void doit()
{
    this.Text = "Untitled - PadNotePro";
}
private void New()
{
    if (us == true)
    {
        DialogResult dr = MessageBox.Show("Do you want to save changes to: Untitled?", "Save Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
        if (dr == DialogResult.Yes)
            Save();
        else if (dr == DialogResult.No)
        {
            changeformtext.RunWorkerAsync();
        }
        else if (dr == DialogResult.Cancel)
            Close();
    }
    else
    {
        changeformtext.RunWorkerAsync();
    }
}
于 2013-08-19T01:26:57.907 に答える