iT邦幫忙

0

C# windows Form 如何按按鈕開啟表單,在按一次按鈕關閉開啟的表單

  • 分享至 

  • xImage

首先我在Form1 中建立button1按鈕事件,我想點一下我的button1就能夠開啟另一個表單Form2,於是我在Click裡面寫上

Form2() open =new Form2();

但是當我每次按下按鈕,他就會生出一個新的Form2來,我該如何做到如果我已經開啟Form2,Form1上的按鈕就不在生成新的Form2而是將既有的Form2移到最上面,或是當我開啟Form2時,再按一下會變成把Form2關掉呢?


回覆一樓大大,我很菜還在學習,如果有什麼觀念補充的話請不吝指教,我也不知道怎麼在下面回覆,但是我想要的是我的Form1是還能動的


對,因為我第一次還第二次發問XD,感謝大大的回答,我學到了新的知識(非常感謝),但可能是我的發問不精確,我的想法是在我Form1的click裡判斷
if(Form2是開啟的狀態)
{
關閉開啟中的Form2
}
else
{
開啟Form2
}
也就是說我想要Form1的button變成一個開關,可以開關Form2,但是我不知道怎麼取得我正在執行的Form2,我對C#的概念還很淺,希望不吝指教謝謝。

Homura iT邦高手 1 級 ‧ 2021-11-09 14:15:07 檢舉
觀念怪怪的
應該要Form2開起來後
Form1要被鎖定不能動才對吧...
Homura iT邦高手 1 級 ‧ 2021-11-09 15:25:35 檢舉
你不能回復應該是新手任務沒做完...
Homura iT邦高手 1 級 ‧ 2021-11-09 16:12:02 檢舉
我幫你補充囉
在第3個範例
有解決記得選最佳解
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
Homura
iT邦高手 1 級 ‧ 2021-11-09 15:24:14
最佳解答

如果照你的想法
只要每次都close在dispose就行
大概像下面這樣

public partial class Form1 : Form
{
    Form2 form;
    public Form1()
    {
        InitializeComponent();
        
        // 因為你每次都要執行關閉所以先建立出來
        form = new Form2();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Close();
        form.Dispose();
        form = new Form2();
        form.Show();
        
    }
}

如果要像我上面回的鎖住的話
要把show改成ShowDialog
這樣就不用每次都重新建立新視窗
一直都是用同一份
程式碼像下面這樣

public partial class Form1 : Form
{
    Form2 form;
    public Form1()
    {
        InitializeComponent();

        form = new Form2();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        form.ShowDialog();
    }
}

補充你要的
要偵測目前開啟的狀況可以使用Application.OpenForms.OfType<Form>.any()來偵測
上面Form要換成你目前的Form類別
整體大概像這樣

public partial class Form1 : Form
{
    Form2 form;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (Application.OpenForms.OfType<Form2>().Any())
        {          
            form.Close();
            form.Dispose();
        }
        else
        {
            form = new Form2();
            form.Show();
        }

    }
}


我要發表回答

立即登入回答