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();

その場合、これらの値をフォーム内のプロパティまたはフィールドとして保存する必要があります。これがより堅牢なアプローチである理由は、偶発的な変更に対する耐性があるためです。つまり、将来 3 番目の値を渡す必要がある場合、変更が必要なコードを変更するのを忘れる可能性は低くなります。

ここでプロパティ インジェクションを使用することもできますが、あなたの要件がよくわからないので、判断はあなたに任せます。

于 2012-11-20T23:38:04.383 に答える
1

すでに提案されているように、2 つ以上のフィールドを保持するクラスを作成することができます。または、タグにリスト (または配列など、最も適したもの) を作成します。

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

値のキャストが少ない場合は問題ありませんが、多くの値が必要な場合は、もちろんタグの外部でリストを処理し、終了時にタグに設定します。

(私は AC# の専門家ではないので、構文エラーの可能性があることをあらかじめお詫びします)

于 2012-11-20T09:48:10.377 に答える
1

そのための新しいクラスを作成します。その中に 2 つのプロパティを作成します。そのクラスのオブジェクトをタグで送信します。明日、3 番目の値が必要な場合は、新しいプロパティを追加します。

于 2012-11-20T07:52:21.157 に答える
0

2 つの値をタプルに格納し、それをタグに割り当てます。

于 2012-11-20T07:41:03.693 に答える