因为我是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。我知道我应该检查对象是否已经创建或将其移动到某个地方,但是如何?我得到例外的例外。
答案 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种方法。
关闭第一个Form2,然后用新值(可能是最简单的方法)打开一个新的(第二个)Form2
清除Form2上的GridView并使用新值重新填充GridView
从Form1中找出其他选项,只将addtionals传递给Form2,并在Form2上只添加附加到GridView。