我正在.NET 4.5.2上使用Windows窗体。我有2种表格。 Form1具有一个DataGridView,其中包含数据库中的字段,以及一个单击时显示Form2的按钮。 Form2有一个TextBox。当我单击Form1中的按钮时,我想用Form1 DataGridView字段之一的文本填充它。可能吗? “ Form2文本框”修改器设置为public,但仍然无法使用。
我尝试过:
private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
Form2 fr = new Form2();
int row = DataGridView1.CurrentRow.Index;
fr.Textbox1.Text = Convert.ToString(DataGridView1[0, row].Value);
fr.Textbox2.Text = Convert.ToString(DataGridView1[1, row].Value);
}
private void button1_Click(object sender, EventArgs e)
{
Form2 fr = new Form2();
fr.ShowDialog();
}
答案 0 :(得分:0)
首先,您应该公开Form1的datagridview修饰符。 当您单击Form1中的按钮时,打开Form2并将此代码写入Form2_Load()。
Form1 frm = (Form1)Application.OpenForms["Form1"];
int row = frm.DataGridView1.CurrentRow.Index;
Textbox1.Text = Convert.ToString(frm.DataGridView1[0, row].Value);
Textbox2.Text = Convert.ToString(frm.DataGridView1[1, row].Value);
这应该有效。
答案 1 :(得分:0)
您的问题存在,因为您使用的是ShowDialog()
而不是Show()
方法。从this answer开始堆栈溢出:
Show函数以非模式形式显示表单。这意味着您可以单击父表单。
ShowDialog以模态显示表单,这意味着您无法转到父表单。
以某种方式与将值从一种形式传递到另一种形式交互,我认为是因为在ShowDialog()
方法之后第一种形式被阻塞(暂停),因此阻止了您从DataGridView复制值。
如果您故意使用ShowDialog()
方法,则可以尝试以某种方式绕过此限制。例如,通过使用 Owner 属性(也选中this answer)和,我设法将所需的值从DataGridView传递到新创建的Form(称为Form2)中的TextBox中。 Form.Shown 事件。您可以尝试在 button1_Click 事件处理程序中将此代码替换为这段代码(或者可能只是使用Form2类在文件中创建Shown事件处理程序):
Form2 fr = new Form2();
int row = DataGridView1.CurrentRow.Index;
fr.Shown += (senderfr, efr) =>
{
// I did null check because I used the same form as Form2 :)
// You can probably omit this check.
if (fr.Owner == null) return;
var ownerForm = (Form1)fr.Owner;
fr.Textbox1.Text = ownerForm.DataGridView1[0, row].Value.ToString();
fr.Textbox2.Text = ownerForm.DataGridView1[1, row].Value.ToString();
};
fr.ShowDialog(this);
建议。为什么您会使用Convert.ToString()
而不是像我在示例中那样简单地在Value属性上调用ToString()
方法?
答案 2 :(得分:0)
Form2 fr = new Form2();
private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int row = DataGridView1.CurrentRow.Index;
fr.Textbox1.Text = Convert.ToString(DataGridView1[0, row].Value);
fr.Textbox2.Text = Convert.ToString(DataGridView1[1, row].Value);
}
private void button1_Click(object sender, EventArgs e)
{
fr.ShowDialog();
}