亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不觸發FormClosing的情況下返回到上一個表單?

如何在不觸發FormClosing的情況下返回到上一個表單?

C#
冉冉說 2023-07-09 17:40:39
我有一個帶有許多表單的 winforms 應用程序。為了導航它們,我想使用某種代碼:第一個表格有這個打開新窗口:    private void Button2_Click(object sender, EventArgs e)        {            this.Hide();            Form2 form2 = new Form2();            form2.ShowDialog();            this.Show();        }在第二種形式中,我可以返回到上一個窗口:    private void ButtonReturn_Click(object sender, EventArgs e)        {            this.DialogResult = DialogResult.OK;        }但我也有處理關閉第二種形式的功能:        private void Form2_FormClosing(object sender, FormClosingEventArgs e)        {            DialogResult result = MessageBox.Show("Sure?", "Close", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);            if (result.Equals(DialogResult.OK))            {                Environment.Exit(0);            }            else            {                e.Cancel = true;            }        }所以我的問題如下:我想使用 ButtonReturn 返回到上一個表單而不觸發表單關閉函數,該函數設置為在“FormClosing”上運行。我希望它僅在按下窗口中的紅色 [X] 后運行。ButtonReturn 應該導航回上一個表單,而不顯示對話框消息。我怎樣才能實現這個目標?因為現在單擊“返回”按鈕后也會顯示關閉對話框。C#窗體
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

您可以使用FormClosingEventArgs.CloseReason 屬性來確定是否顯示 MessageBox。

設置DialogResult模態表單的屬性是我知道的唯一一次將CloseReason是CloseReason.None。調用Form.Close或單擊“X”按鈕將顯示一個CloseReasonof?CloseReason.UserClosing。

我建議您只在這種情況下顯示消息CloseReason.UserClosing。這符合您聲明的意圖,并且還可以防止顯示其他可能的 CloseReason 消息。

if (e.CloseReason == CloseReason.UserClosing)

{

? ? DialogResult result = MessageBox.Show("Sure?", "Close", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

? ? if (result.Equals(DialogResult.OK))

? ? {

? ? ? ? Environment.Exit(0);

? ? }

? ? else

? ? {

? ? ? ? e.Cancel = true;

? ? }

}


查看完整回答
反對 回復 2023-07-09
?
森林海

TA貢獻2011條經驗 獲得超2個贊

最簡單的方法是this.Hide();在第二種形式中使用來隱藏它:


   private void ButtonReturn_Click(object sender, EventArgs e)

    {

        this.Hide();

    }

但是,每次單擊第一個 Form 中的 Button2_Click 事件時,都會啟動一個新的 Form2。如果您希望第二個表單保持不變/保留文本框中的值等,您應該在按鈕單擊事件之外定義表單,并僅在尚未使用時實例化它。像這樣的東西:


     Form2 form2;


    private void Button2_Click(object sender, EventArgs e)

    {

        if(form2 == null) { form2 = new Form2();}

        this.Hide();

        form2.ShowDialog();

        this.Show();

    }

編輯: 為了防止觸發關閉事件,您可以定義一個布爾值來檢查是否按下了返回按鈕。然后每次使用 Form_Activated 再次打開表單時重置該值:


    bool showClosingEventMessage = true;

    private void button1_Click(object sender, EventArgs e)

    {

        showClosingEventMessage = false;

        this.Hide();

    }


    private void Form2_Activated(object sender, EventArgs e)

    {

        showClosingEventMessage = true;

    }


    private void Form2_FormClosing(object sender, FormClosingEventArgs e)

    {

        if (showClosingEventMessage)

        {

            DialogResult result = MessageBox.Show("Sure?", "Close", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

            if (result.Equals(DialogResult.OK))

            {

                Environment.Exit(0);

            }

            else

            {

                e.Cancel = true;

            }

        }

    }


查看完整回答
反對 回復 2023-07-09
  • 2 回答
  • 0 關注
  • 180 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號