2012-04-20 4 views
1

私はスキルを伸ばして新しいことを学ぶために、C#エクササイズプロジェクトに取り組んでいます。いくつかのコントロールからなる動的なインターフェースを作成しました。フォームがロードされると、それはnumericUpDownとButtonで起動します。ユーザーが数字の上の数字を選択してボタンをクリックすると、numericUpDownで選択された数字に応じて多くのテキストボックスが生成され、生成されたテキストボックスの横に削除ボタンも生成されます。私は、ユーザーが削除ボタンダイナミックインターフェイスからコントロールを削除する

をクリックしたときに、これは私が持っているコードでテキストボックスを削除する手間が生じています:ここで

//生成テキストボックスとボタン

private void AssessmentButton_Click(object sender, EventArgs e) 
{ 
    int length = (int)this.NoAssesmentBoxlv4.Value; 
    for (int i = 0; i < length; i++) 
    { 
    textboxAssesmentName.Add(new TextBox()); 
    var p = new System.Drawing.Point(110, 260 + i * 25);      
    (textboxAssesmentName[i] as TextBox).Location = p; 
    (textboxAssesmentName[i] as TextBox).Size = new System.Drawing.Size(183, 20); 
    this.Lv4Tab.Controls.Add(textboxAssesmentName[i] as TextBox); 
    buttoRemove.Add(new Button()); 
    (buttoRemove[i] as Button).Location = new System.Drawing.Point(380, 260 + i * 25); 
    (buttoRemove[i] as Button).Text = @"x"; 
    (buttoRemove[i] as Button).BackColor = Color.Red; 
    (buttoRemove[i] as Button).ForeColor = Color.White; 
    (buttoRemove[i] as Button).Size = new System.Drawing.Size(22, 23); 
    this.Lv4Tab.Controls.Add(buttoRemove[i] as Button); 

    (buttoRemove[i] as Button).Click += this.buttoRemove_click; 
    } 
} 

ことについてsoruceですボタンのクリックを削除する:任意のアイデアをいただければ幸い

private void buttoRemove_click(object sender, EventArgs e) 
{ 
    foreach (Object obj in textboxAssesmentName) 
    { 
    // THIS LINE DOES NOT COMPILE!!! 
    this.Controls.Remove(textboxAssesmentName.Remove); 
    } 
} 

を(このメソッドはコンパイルされません)

+2

「*動作しません」とはどういう意味ですか? [私たちは、読者を気にされていません。](http://meta.stackexchange.com/a/128551/102937) –

+0

私のコードこれが唯一の私ならば削除ボタンを削除し続ける – Tacit

答えて

1

はあなたの既存のコードは、どんな意味がありません

foreach (var control in textboxAssesmentName) 
{ 
    this.Controls.Remove(control); 
} 

のようなものを試してみてください。

は、私はあなたがそれに関連付けられたTextBoxを保存するためにButtonTagプロパティを使用することをお勧め
http://msdn.microsoft.com/en-us/library/82785s1h%28v=vs.80%29.aspx

0

も参照してください。 、あなたのコードに入れて、あなたのループ内でこの行を挿入するには:

private void buttoRemove_click(object sender, EventArgs e) 
{ 
    this.Controls.Remove((sender as Control).Tag as Control); 
} 

編集:ここで私はコードを書くような方法がある(除く

(buttoRemove[i] as Control).Tag = textboxAssesmentName[i]; 

その後、あなたのイベントハンドラは、このようになります。タイプミス)。

private void AssessmentButton_Click(object sender, EventArgs e) 
{ 
    int length = (int)this.NoAssesmentBoxlv4.Value; 
    for (int i = 0; i < length; i++) 
    { 
     TextBox t = new TextBox(); 
     System.Drawing.Point p = new System.Drawing.Point(110, 260 + i * 25);      
     t.Location = p; 
     t.Size = new System.Drawing.Size(183, 20); 

     Button b = new Button(); 
     b.Location = new System.Drawing.Point(380, 260 + i * 25); 
     b.Text = @"x"; 
     b.BackColor = Color.Red; 
     b.ForeColor = Color.White; 
     b.Size = new System.Drawing.Size(22, 23); 
     b.Click += new System.EventHandler(this.buttoRemove_click); 

     this.Lv4Tab.Controls.Add(t); 
     this.Lv4Tab.Controls.Add(b); 
     textboxAssesmentName.Add(t); 
     buttoRemove.Add(b); 
    } 
} 

private void buttoRemove_click(object sender, EventArgs e) 
{ 
    Control b = sender as Control; 
    Control t = b.Tag as Control; 
    this.Lv4Tab.Controls.Remove(t); 
    this.Lv4Tab.Controls.Remove(b); 
    textboxAssesmentName.Remove(t); 
    buttoRemove.Remove(b); 
} 
+0

に赤でその下線の任意のコントロールを削除しません。生成ボタンを2回押すと生成されたコピーが保持されるため、IDは削除ボタンを2回押して削除する必要があります – Tacit

関連する問題