0

私は自分のスキルを伸ばし、新しいことを学ぶために、ac#エクササイズプロジェクトに取り組んでいます。いくつかのコントロールで構成される動的インターフェイスを作成しました。フォームが読み込まれると、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;
  }
}

削除ボタンのクリックのソースは次のとおりです:(このメソッドはコンパイルされません)

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

どんなアイデアでも大歓迎です

4

2 に答える 2

1

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

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

既存のコードは意味がありません。

http://msdn.microsoft.com/en-us/library/82785s1h%28v=vs.80%29.aspxも参照してください。

于 2012-04-20T22:48:09.890 に答える
0

Tagのプロパティを使用して、関連付けられているButtonを保存することをお勧めします。TextBoxコードに入れるには、次の行をループに挿入します。

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

次に、イベント ハンドラーは次のようになります。

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

編集:コードを書く方法は次のとおりです(タイプミスを除く)。

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);
}
于 2012-04-20T22:49:23.307 に答える