使用form1中的索引并在form2中使用它

时间:2013-02-11 18:49:05

标签: c# winforms

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

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

以下是form1的代码

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

form1中是否有遗漏的东西?如何将索引转换为其他形式?救命。

3 个答案:

答案 0 :(得分:1)

最直接的方法可能是将它包含在Form2的构造函数中。所以在Form2你有这样的东西:

public Form2(int clientID)
{
    // Do something with the clientID
    // Most likely set it to a property on Form2, or a private member.
}

然后在Form1创建Form2的实例时,它可能看起来像这样:

var index = clientesgrid.SelectedRows[0].Index;
var editForm = new Form2(index);
editForm.Show();

理想情况下您希望此参数成为客户端的标识符,只是来自DataGridView Form1的行索引。这样做的原因是,如果它只是一个行索引并且该行包含您需要的数据,那么Form2没有它所需的数据,它仍然依赖于Form1来获取更多数据。

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

如果Form2 总是需要此标识符,那么您可以采取额外步骤使其无参数构造函数成为私有:

private Form2() { }

这会阻止其他表单创建Form2的实例而不提供所需的必要值。

答案 1 :(得分:0)

你必须以某种方式将它传递给第二种形式,例如

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

答案 2 :(得分:0)

在Form2上创建publicinternal属性/字段

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