2017-12-06 7 views
0

これまでのところ私のコードで、numericUpDownとbuttonという名前のメニューアップ項目があります。ユーザーがボタンを押したときに番号を選択すると、フィールドが動的に作成されました。動的に作成されたテキストフィールドの入力値を取得するにはどうすればよいですか?

private void createPerson_Click(object sender, EventArgs e) 
{  
    Label[] person_Name = new Label[(int)this.numericUpDown.Value]; 
    TextBox[] person_txtinput = new TextBox[(int)this.numericUpDown.Value]; 

    for (int i = 0; i < this.numericUpDown.Value; i++) 
    {  
     //create person name label 
     Person_Name[i] = new Label(); 
     Person_Name[i].Location = new System.Drawing.Point(20, 114 + i * 25); 
     Person_Name[i].Size = new System.Drawing.Size(120, 15); 
     Person_Name[i].Text = (i + 1).ToString() + @")" + "Person Name:"; 
     this.Controls.Add(Person_Name[i]); 

     //create person name textbox 
     PersonNameTxtInput[i] = new TextBox(); 
     PersonNameTxtInput[i].Location = new System.Drawing.Point(140, 114 + i * 25); 
     PersonNameTxtInput[i].Size = new System.Drawing.Size(125, 20); 
     this.Controls.Add(PersonNameTxtInput[i]);  
    }  
} 



private void save_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; j < this.numericUpDown.Value; i++) 
    { 
     MessageBox.Show("" + PersonNameTxtInput[i].Text); 
    } 
} 

私の質問は、どのように私は得ることができ、保存ボタンが押されたときにユーザーによって作成されたどのように多くの分野に応じて、テキストボックスからすべての値?

保存ボタンリスナー内でコードを使用しようとしましたが、どのようにしてLabel[] person_Name = new Label[(int)this.numericUpDown.Value];をグローバル変数にすることができますので、ループの保存ボタン内でアクセスできます。

+1

this.Controlsを繰り返し実行するだけの理由はありますか? –

+0

あなたの質問に私は非常に新しいコーディングに新しい拡張することができます。もし私がthis.Controlsを反復すると、私もラベル名を取得していません。私は、ラベルではなくテキストフィールドからの値が必要です。ここに私が書いたコードがあります。 – user7388968

答えて

3

あなたはこの特定のやり方でこれをやっている理由を正確にはわかりませんが、それはあまり効果的ではないようですが、Ryan_Lが提案したことをやり直してこれを繰り返します。

:あなたはこのような createPerson_Clickイベントの外に二つの配列を定義...ループのための保存ボタンを内からアクセスできるようにグローバル変数を定義する方法をあなたの質問 に関する 今
for(int i = 0; i < this.Controls.Count; i++) 
{ 
    if(this.Controls[i] is TextBox) //skip buttons and labels 
    { 
     MessageBox.Show("" + this.Controls[i].Text); 
    } 
} 

Label[] person_Name; 
TextBox[] person_txtinput; 

private void button1_Click(object sender, EventArgs e) 
{ 
    person_Name = new Label[(int)this.numericUpDown.Value]; 
    person_txtinput = new TextBox[(int)this.numericUpDown.Value]; 
    //the rest of the code 
} 

希望すると便利です。しかし、あなたは全体のアプローチを再考したいかもしれません。

+1

情報のおかげで、ありがとうございました反復のアプローチを試してください – user7388968

+1

ねえ私はあなたの方法を試してみましたが、それはテキストフィールドの特定のグループへの道です。たとえば、ユーザが数字のアップダウンフィールドから2を選択した場合、フィールドにperson names、person surnameを2回作成すると、どのように変数内に各値を格納しますか?これは、ユーザーからの入力を取得してxmlファイルに保存する必要があることを目的としています。 – user7388968

+0

私は質問を正しく理解しているかどうかはわかりませんが、わかっていれば、各値を文字列のリストに格納することができます。したがって、MessageBox.Showの代わりに、次のようなものがあります。 'myList.Add(this.Controls [i] .Text); ' 次に、forループの後にリストをシリアライズできます。 [this](https://social.msdn.microsoft.com/Forums/vstudio/en-US/0a5aa658-7276-42e5-9d9e-b786694d6020/c-serialize-liststring-to-xml?forum=csharpgeneral)スレッドを参照してください。リストをシリアライズする方法を学ぶ。 – pixela

関連する問題