0

フォーム間で配列を渡すことになると、この概念は非常に新しいと言うことから始めます。

現在、私は悲惨な状況にあります:

  1. ユーザーがボタンをクリックすると、ユーザーの詳細を示すグリッドビューが生成されます

  2. ユーザーはセルをクリックすると、データがテキストボックスと配列リストに追加されます。

  3. 次に、ユーザーはボタンをクリックして前のフォームに戻り、最初のフォームのテキストボックス内に配列リスト要素にアクセスして表示します。

現在、最初のフォーム(Form1)用に、2番目のフォームから宣言されたarrayListを設定する新しいコンストラクターを作成しました。

現時点ではエラーは発生していませんが、空白のフォームが作成されています。次のスクリーンショットは状況を示しています。

ユーザーは、最初のフォームの[追加]ボタンをクリックします-Form1

ここに画像の説明を入力してください

次に、ユーザーはアドレスをテキストボックスに配置する「電子メール」セルを選択します。このメールアドレスは、バックグラウンドコードのリスト配列にも追加されます。

ここに画像の説明を入力してください

[連絡先の追加]をクリックすると、最初のフォーム(最初の画像のフォーム)が表示されますが、代わりに新しいフォームが作成されます。

ここに画像の説明を入力してください

これがコードです。現在、この問題は、返された配列リストを設定するために使用されるForm1クラスの2番目のコンストラクターにあると考えています。

   List<string> myCollection = new List<string>();

   private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

        string add = dataGridView1.CurrentRow.Cells[3].Value.ToString();

        myCollection.Add(add);

        txtCCAdd.Text += add + ", ";

    }



 private void btnSetCC_Click(object sender, EventArgs e)
    {
        Form1 form = new Form1(myCollection);
        form.Show();
    }

リストの設定に使用されるForm1コンストラクター:

    string attachment;
    List<string> myCollection = new List<string>();


    public Form1()
    {
        InitializeComponent();


    }

    **** Second constructor used to set the List array ****
    public Form1(List<string> a)
    {
        myCollection = a;
    }

うまくいけば、誰かが私がどこで間違っているのか教えてくれます!

4

3 に答える 3

3

コントロールを実際に初期化することはないため、フォームが実際に作成されることはありません。使用する:

public Form1(List<string> a)
{
    InitializeComponent();
    myCollection = a;
}

また

public Form1(List<string> a)
{
    Form1();
    myCollection = a;
}
于 2013-03-21T21:28:32.240 に答える
1

リストを渡して新しいForm1を作成する代わりに、2番目のフォームから選択した値を返すだけです。

Form1の場合(Form2を表示する必要がある場合):

using(Form2 form2 = new Form2())
{
   if (form2.ShowDialog() != DialogResult.OK)
      return;

   myCollection.Add(form2.SelectedValue); // add value to list here
}

Form2の場合

public string SelectedValue { get; private set; }

void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    SelectedValue = dataGridView1.CurrentRow.Cells[3].Value.ToString();
}

private void btnSetCC_Click(object sender, EventArgs e)
{
    DialogResult = DialogResult.OK;
}

Form2から選択した複数の値を返したい場合でも、ローカルの値のリストを使用して、そのリストをForm1に返します。Form2は、これらの値をどのように使用するかについて何も知らないはずです。について考えてくださいFileOpenDialog。選択したファイル名を返すだけで、それがそのダイアログの責任です。で埋めるためにリストやオブジェクトを渡す必要はありませんFileOpenDialog

于 2013-03-21T21:31:43.840 に答える
0

2番目のコンストラクターでInitializeComponentを呼び出します。

于 2013-03-21T21:30:09.960 に答える