簡體   English   中英

防止表單多次打開

[英]Prevent Form from opening multiple times

因為我是C#的新手,所以我認為這個問題有點愚蠢,但是直到現在我還沒有找到適合我所遇到問題的解決方案。 我有兩種形式。 在Form1中,我單擊一個按鈕,然后彈出一個Form2,可以看到GridView。 我要做的是:在第一個GridView(Form1)中選擇行,然后將選定的行傳遞給Form2中的GridView2。 那是第一次。

  private void selectRows_Click(object sender, EventArgs e)
    {
        var form2 = new Form2(this);

        form2.select_rows(sender);

        if (form2.Visible)
        {
            form2.Close();
        }
        form2.Show(this);
    }

但現在我不知道如何正確執行此操作。 當我在GridView1中選擇更多行並再次單擊按鈕時,Form2應該保持打開狀態,並且值應僅添加到GridView2中的現有行中。 以我為例,將打開一個新的Form2,並將其他行放入新的Form2中。 我知道我應該檢查對象是否已經創建或將其移出某個位置,但是如何? 我得到異常之上的異常。

您需要在方法外部聲明form2,然后像您已經在做的那樣在您的方法內部引用它,您不想關閉表單,只需隱藏它即可。 也許還沒有。

您也需要將聲明移到Form1的構造函數中

Form2 form2;
public Form1()
{
    form2 = new Form2(this);
}

private void selectRows_Click(object sender, EventArgs e)
{
    if(form2 == null)
        form2 = new Form2(this);

    form2.select_rows(sender);
    form2.Show(this);
}

Form1.cs的

public partial class Form1 : Form
{      
    public Form2 f = new Form2();
    public Form1()
    {
        InitializeComponent();           
    }

    private void button1_Click(object sender, EventArgs e)
    {

        f.Show();
        f.dataGridView2.Rows.Clear();
        foreach (DataGridViewRow d in dataGridView1.SelectedRows)
        {
            f.dataGridView2.Rows.Add(new object[] { d.Cells[0].Value.ToString(), d.Cells[1].Value.ToString() });
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        dataGridView1.Rows.Add(new object[] { "1", "aaaa" });
        dataGridView1.Rows.Add(new object[] { "2", "bbbb" });
        dataGridView1.Rows.Add(new object[] { "3", "cccc"});
        dataGridView1.Rows.Add(new object[] { "4", "dddd"});
    }
}

Form2.cs

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

          private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();           
        e.Cancel = true;
    }
}

試試這個...希望有幫助...

我在想3種方法。

  1. 關閉第一個Form2,然后使用新值打開一個新的(第二個)Form2(可能是最簡單的方法)

  2. 在Form2上清除GridView並用新值重新填充GridView

  3. 從Form1中找出其他選擇,僅將附加項傳遞到Form2,並將僅附加項添加到Form2上的GridView中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM