防止表单多次打开
Prevent Form from opening multiple times
因为我是 C# 的新手,所以我认为这个问题有点愚蠢,但直到现在我还没有找到适合我遇到的问题的解决方案。
我有两个表格。在 Form1 中,我单击一个按钮,然后弹出一个 Form2,其中可以看到一个 GridView。我所做的是:我在我的第一个 GridView (Form1) 中 select 行,然后将 selected 行传递给 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 中 select 更多行并第二次点击按钮时,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 种方法。
关闭第一个 Form2 并使用新值打开一个新的(第二个)Form2(可能是最简单的方法)
清除 Form2 上的 GridView 并用新值重新填充 GridView
从Form1中找出附加项,只将附加项传递给Form2,只将附加项添加到Form2上的GridView。
因为我是 C# 的新手,所以我认为这个问题有点愚蠢,但直到现在我还没有找到适合我遇到的问题的解决方案。 我有两个表格。在 Form1 中,我单击一个按钮,然后弹出一个 Form2,其中可以看到一个 GridView。我所做的是:我在我的第一个 GridView (Form1) 中 select 行,然后将 selected 行传递给 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 中 select 更多行并第二次点击按钮时,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 种方法。
关闭第一个 Form2 并使用新值打开一个新的(第二个)Form2(可能是最简单的方法)
清除 Form2 上的 GridView 并用新值重新填充 GridView
从Form1中找出附加项,只将附加项传递给Form2,只将附加项添加到Form2上的GridView。