1

ボタンがクリックを実行した後、このフォームのクローズファイアを解決するのを手伝ってください。私はウィンドウのクローズボタン(右上隅)にのみ依存しているため、フォームを閉じるために追加のボタンを使用しません。ただし、このプログラムは引き続き機能しますが、.iniファイルを保存した直後にフォームを自動的に閉じることはありません。

button1.performclick()の後でフォームを閉じたいのですが、どうしたらよいかわかりません。

私は次のコードを持っています:

    int beFore, afTer;
    private void Form3_Load(object sender, EventArgs e)
    {
        beFore = this.checkedListBox1.CheckedIndices.Count +
                 this.checkedListBox2.CheckedIndices.Count +
                 this.checkedListBox3.CheckedIndices.Count +
                 this.checkedListBox4.CheckedIndices.Count;
    }
    //private Form4 subForm4 = new Form4();
    private void Form3_FormClosing(object sender, FormClosingEventArgs e)
    {
        afTer = this.checkedListBox1.CheckedIndices.Count +
                this.checkedListBox2.CheckedIndices.Count +
                this.checkedListBox3.CheckedIndices.Count +
                this.checkedListBox4.CheckedIndices.Count;
        while (beFore != afTer)
        {
            if (MessageBox.Show("Changes have been made..\r\nSave to configuration file (.ini) ?", "Warning",
                 MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                this.button1.PerformClick(); //need to close this form after button.performclick..
                this.UpdateForm1();
                break;
            }
            else
            {
                this.UpdateForm1();
                break;
            }
        }
        beFore = afTer;

    }

    private void UpdateForm1()
    {
        Form4 subForm4 = new Form4();
        subForm4.Show();
        subForm4.Update();
        try
        {
            int checkagain1 = this.checkedListBox1.CheckedIndices.Count; this.checkedListBox1.SetItemChecked(2, true);
            int checkagain2 = this.checkedListBox2.CheckedIndices.Count; this.checkedListBox2.SetItemChecked(2, true);
            int checkagain3 = this.checkedListBox3.CheckedIndices.Count; this.checkedListBox3.SetItemChecked(2, true);
            int checkagain4 = this.checkedListBox4.CheckedIndices.Count; this.checkedListBox4.SetItemChecked(2, true);

            Form1 myParentForm = (Form1)this.Owner;
            if (myParentForm.comboBox1.Text.Length != 0)
            {
                //myParentForm.Enabled = false;
                myParentForm.method1();
                myParentForm.method2();
                myParentForm.method3();
                myParentForm.method4();
                //myParentForm.Enabled = true;
                subForm4.Close();
            }

        }
        catch (Exception)
        {
            subForm4.Close();
            return;
            throw;
        }
    }
4

2 に答える 2

1

あなたが何を望んでいるかは 100% わかりませんが、あなたが探している答えがフォームの DialogResult プロパティにあると確信しています。

ボタンをクリックするとフォームが閉じてしまうという問題がある場合は、フォームの DialogResult プロパティに DialogResult.None を設定します。

DialogResult = DialogResult.None;
于 2013-03-14T14:28:41.420 に答える
0

正しく理解できませんでしたが、結果が「はい」の場合にフォームを閉じたい場合は、このようにすることができます。

if (MessageBox.Show("Changes have been made..\r\nSave to configuration file (.ini) ?", "Warning",
                 MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                this.Dispose();
                this.Close();
            }

Dispose は、プログラムが使用するすべてのリソースを消去してから閉じます。または、Close はフォームを直接閉じます。

または、これが必要な場合はこれを試してください:

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

    if (MessageBox.Show("Changes have been made..\r\nSave to configuration file (.ini) ?", "Warning",
                     MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    button1.PerformClick();
                }
于 2013-03-14T14:47:40.937 に答える