防止表单多次打开

时间:2015-01-29 07:20:36

标签: c# winforms forms

因为我是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。我知道我应该检查对象是否已经创建或将其移动到某个地方,但是如何?我得到例外的例外。

3 个答案:

答案 0 :(得分:0)

你需要在方法之外声明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);
}

答案 1 :(得分:0)

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;
    }
}

试试这个...希望这个帮助...

答案 2 :(得分:0)

我想到了3种方法。

  1. 关闭第一个Form2,然后用新值(可能是最简单的方法)打开一个新的(第二个)Form2

  2. 清除Form2上的GridView并使用新值重新填充GridView

  3. 从Form1中找出其他选项,只将addtionals传递给Form2,并在Form2上只添加附加到GridView。