4

このエラーが発生しています Collection was modified; 列挙操作が実行されない場合があります。

私は3つのフォームを持っています。これらは、3 つすべてのフォーム クロージング イベントです。いくつかの調査を行ったところ、一部が変更されているか、このエラーの原因となっていることがわかりました。

フォーム1

private void btnExitl_Click(object sender, EventArgs e)
        {
            this.Close();   
        }

private void frmPlant_FormClosing(object sender, FormClosingEventArgs e)
    {

     if (DataDirty)
        {
            if (DialogResult.Yes == MessageBox.Show("Are you sure you want to exit", "Data Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question))

                 Application.Exit();
            else
                e.Cancel = true;
        }
        else

             Application.Exit();
    }

フォーム2:

 private void btnCancel_Click(object sender, EventArgs e)
    {

        this.Close();
    }

    private void frmInputFiles_FormClosing(object sender, FormClosingEventArgs e)
    {
        int plantid = StaticClass.GlobalValue;
        //Properties.Settings.Default.PlantId = plantid;

        Program.fPlant = new frmPlant(plantid);

        Program.fPlant.Show();
        e.Cancel = false;
        //this.Hide();
    }

フォーム3:

    private void btnClose_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void frmVesselData_FormClosing(object sender, FormClosingEventArgs e)
    {


        DialogResult result;
        int fileId = StaticClass.FileGlobal;
        if (DataDirty)
        {
            string messageBoxText = "You have unsaved data. Do you want to save the changes and exit the form?";
            MessageBoxButtons button = MessageBoxButtons.YesNo;
            string caption = "Data Changed";
            MessageBoxIcon icon = MessageBoxIcon.Question;
            result = MessageBox.Show(messageBoxText, caption, button, icon);
            if (result == DialogResult.No)
            {
                Program.fInputFiles = new frmInputFiles(gPlantId, gPlantName);

                    Program.fInputFiles.Show();
                   //e.Cancel=true;

            }
            if (result == DialogResult.Yes)
            {
                e.Cancel = true;
                //return;

            }
        }
        else
        {
            Program.fInputFiles = new frmInputFiles(gPlantId, gPlantName);
                Program.fInputFiles.Show();
                //e.Cancel = false;

        }      
    }

3 番目のフォーム (Form3) を表示したときにのみ発生します。Form1、Form2 はうまく機能します。しかし、form3 を表示して form1 に戻ろうとすると、form3 のクロージング イベントのどこかで form1

私の推測ではbtnExit_close、フォームのイベントですthis.close()

ありがとうございました

4

2 に答える 2

4

最初のフォームを閉じるときに、FormClosingEvent でこれを試してください

    private void frmPlant_FormClosing(object sender, FormClosingEventArgs e)
    {

    if (DataDirty)
    {
        if (DialogResult.Yes == MessageBox.Show("Are you sure you want to exit", "Data Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
        {
             this.Close();
             Application.Exit();
        }
        else
            e.Cancel = true;
    }
    else
         Application.Exit();
    }

最初に this.Close() を呼び出してから Application.Exit() を呼び出し、Application.Exit() はすべてのプロセスを終了し、Close() はメイン フォームを閉じます。

于 2013-08-06T11:04:28.410 に答える