当我想存储/传递一个值时,我总是使用.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;
我到底该怎么做?
感谢
答案 0 :(得分:2)
到目前为止给出的两个答案都有效,但我想详细说明答案并提供替代方案。假设您创建了自己的类:
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();
然后,您很可能必须将这些值存储为表单内的属性或字段。这是一种更强大的方法,因为它可以抵抗意外变化。换句话说,如果您将来需要传递第3个值,那么您不太可能忘记更改需要更改的代码。
你也可以在这里使用房产注资,但我不确定你的要求,所以我会留给你决定。
答案 1 :(得分:1)
为它创建一个新类。在其中创建两个属性。在标记中发送该类的对象。明天如果需要第三个值,则添加一个新属性。
答案 2 :(得分:1)
你可以按照已经建议做的,并创建一个包含两个+字段的类 - 或者 - 在标记上创建一个列表(或一个数组,最适合的):
this.Tag = new List<int>();
((List<int>)this.Tag).Add(value1);
((List<int>)this.Tag).Add(value2);
...
使用少量值进行投射不是问题,但如果您需要许多值,您当然会在标签外部处理列表,然后在完成时将其设置在标记上。
(我不是一个真正的c#家伙因此可能会因语法错误而道歉)
答案 3 :(得分:0)
将两个值存储在元组中并将其分配给标记。