3

当我想存储/传递一个值时,我总是使用 .Tag 属性。例如,当我存储值时:

Form prosesEdit = new FormProsesChemicalRawWbEdit();
                        prosesEdit.Tag = (int)this.proses_chemicalDataGridView.Rows[e.RowIndex].Cells[1].Value;
                        prosesEdit.ShowDialog();

然后,我会将值传递到我的 EDIT 表单中,如下所示:

proses_chemical_id = (int) this.Tag;
            this.proses_chemicalTableAdapter.FillByChemId(this.mcd_softwareDataSet.proses_chemical, proses_chemical_id);
            this.proses_chemical_listTableAdapter.FillByChemId(this.mcd_softwareDataSet.proses_chemical_list, proses_chemical_id);

但最近,我应该存储并传递 2 个不同的值。比方说(int)this.proses_chemicalDataGridView1.Rows[e.RowIndex].Cells[1].Value;(int)this.proses_chemicalDataGridView2.Rows[e.RowIndex].Cells[1].Value; 我到底该怎么做?谢谢

4

4 回答 4

4

到目前为止给出的两个答案都有效,但我想稍微详细说明一下答案并提供一个替代方案。假设您像这样创建自己的类:

public class YourClass
{
    public int ProsesChemicalId1 { get; set; }
    public int ProsesChemicalId2 { get; set; }
}

然后您可以将您的类的实例分配给 Tag 属性,如下所示:

YourClass yourClass = new YourClass();
yourClass.ProsesChemicalId1 = this.proses_chemicalDataGridView1.Rows[e.RowIndex].Cells[1].Value;
yourClass.ProsesChemicalId2 = this.proses_chemicalDataGridView2.Rows[e.RowIndex].Cells[1].Value;

Form prosesEdit = new FormProsesChemicalRawWbEdit();
prosesEdit.Tag = yourClass;
prosesEdit.ShowDialog();

您可以像这样从 Tag 属性中获取类的实例:

yourClass = (YourClass) this.Tag;
this.proses_chemicalTableAdapter.FillByChemId(this.mcd_softwareDataSet.proses_chemical, yourClass.ProsesChemicalId1);

但是,使用 Tag 属性在表单中传递值通常是不好的做法,因为它需要大量类型转换和每个标签中存储的内容的知识。

更健壮的方法是使用构造函数注入,因为您知道要创建的表单类型:

int value1 = this.proses_chemicalDataGridView1.Rows[e.RowIndex].Cells[1].Value;
int value2 = this.proses_chemicalDataGridView2.Rows[e.RowIndex].Cells[1].Value;

Form prosesEdit = new FormProsesChemicalRawWbEdit(value1, value2);  
prosesEdit.ShowDialog();

然后,您很可能必须将这些值存储为表单内的属性或字段。这是一种更强大的方法的原因是它可以抵抗意外更改。换句话说,如果您将来需要传入第三个值,那么您不太可能忘记更改需要更改的代码。

你也可以在这里使用属性注入,但我不确定你的要求,所以我会留给你决定。

于 2012-11-20T23:38:04.383 回答
1

为它创建一个新类。在其中创建两个属性。在标签中发送该类的对象。明天如果需要第三个值,则添加一个新属性。

于 2012-11-20T07:52:21.157 回答
1

您可以按照已经建议的方式创建一个包含两个以上字段的类 - 或者 - 在标签上创建一个列表(或一个数组,任何最适合的):

this.Tag = new List<int>();
((List<int>)this.Tag).Add(value1);
((List<int>)this.Tag).Add(value2);
...

很少值转换不是问题,但是如果您需要很多值,您当然会在标签外部处理列表,然后在完成后将其设置在标签上。

(我不是真正的 ac# 家伙,所以提前为可能的语法错误道歉)

于 2012-11-20T09:48:10.377 回答
0

将您的两个值存储在一个元组中并将其分配给标签。

于 2012-11-20T07:41:03.693 回答