C# 使用表格1中的索引,并在表格2中使用

C# 使用表格1中的索引,并在表格2中使用,c#,winforms,C#,Winforms,所以在表单1中,我有一个datagridview,当用户想要编辑任何客户机时,他选择一个并单击编辑按钮。。。并显示一个新窗口 在新窗口中,我希望文本框1是客户的名称,文本框2是地址 这是表格1的代码 public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e) { int index = clientesgrid.SelectedRows[0].Index; }

所以在表单1中,我有一个datagridview,当用户想要编辑任何客户机时,他选择一个并单击编辑按钮。。。并显示一个新窗口

在新窗口中,我希望文本框1是客户的名称,文本框2是地址

这是表格1的代码

    public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e)
    {
        int index = clientesgrid.SelectedRows[0].Index;
    }

表格1中有我遗漏的东西吗?如何将索引转换为另一种形式?救命啊

您必须以某种方式将其传递到第二个表单,例如

public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e)
{
    form2.RowIndex = clientesgrid.SelectedRows[0].Index;
}

在Form2上创建一个
公共
内部
属性/字段

class Form2
{
    internal int RowIndex; // or  internal int RowIndex {get; set;}
}
就像

public void Clientesgrid_Cellclick(object sender, DataGridViewCellEventArgs e)
{
    form2.RowIndex = clientesgrid.SelectedRows[0].Index;
}

最直接的方法可能是将其包含在
Form2
的构造函数中。所以在
Form2
中,您将有如下内容:

public Form2(int clientID)
{
    // Do something with the clientID
    // Most likely set it to a property on Form2, or a private member.
}
var index = clientesgrid.SelectedRows[0].Index;
var editForm = new Form2(index);
editForm.Show();
然后在
Form1
中,当您创建
Form2
的实例时,它可能看起来像这样:

public Form2(int clientID)
{
    // Do something with the clientID
    // Most likely set it to a property on Form2, or a private member.
}
var index = clientesgrid.SelectedRows[0].Index;
var editForm = new Form2(index);
editForm.Show();
理想情况下,您希望此参数成为客户端的标识符,而不仅仅是
Form1
DataGridView
中的行索引。这是因为如果它只是一个行索引,并且该行包含您需要的数据,那么
Form2
没有它需要的数据,它仍然依赖
Form1
来获取更多数据

尽可能减少依赖关系。任何
Form2
的实例都应该在其构造函数中要求执行其工作所需的任何内容。然后,任何其他表单都可以创建
Form2
的实例,只要它能够提供所需的内容

如果
Form2
始终需要此标识符,则可以采取其他步骤使其无参数构造函数私有:

private Form2() { }

这将防止其他表单在不提供所需值的情况下创建
Form2
的实例。

这是一种方法。或者,如果存在所有权链,则可以将索引设置为属性并引用
((form1)Owner).index
。或者您可以将其作为构造函数参数
newform2(索引)包含。换句话说,除非您允许form2访问索引,否则form2将无法访问索引。