- ベストアンサー
C# コントロールの配列
ボタンを配列でたくさん作ったのはいいのですが 一度作ったボタンを消す方法を教えて下さい。 1,一個ずつ消していく方法 2,一回で作ったものをすべて消す方法 ご回答よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
すいません >1,一個ずつ消していく方法 どのように消去していくのかわかりませんでしたので、クリックしたボタンを消去するサンプルに変更しました。 またボタンを作成する場合は、配列が必須でなければfor文でボタンをリストにすると、リストは機能が強力ですので便利ですね。 今回は、配列が必須の条件の仮定で、ボタンを配列にしてリストにAddしました。 List<Button> arbtn= new List<Button> (); Button[] btn; int h; private void Form1_Shown(object sender, EventArgs e) { btn = new Button[5];//配列の初期化 for (int i = 0; i < 5; ++i) { btn[i] = new Button(); btn[i].Size=new Size(100,40); btn[i].Location = new Point(50, 80 + 45 * i); btn[i].Text = "Button" + (3 + i).ToString();//3+はbutton1とbutton2を追加したためです btn[i].Name = "Button" +(3+ i).ToString(); arbtn.Add(btn[i]); //リストにAddする。 this.Controls.Add(btn[i]); btn[i].Click += new EventHandler(BTN_CLICK); button1.Text = "一個ずつ消す"; button2.Text = "すべて消す"; } } private void BTN_CLICK(object sender, EventArgs e){ MessageBox.Show(((Button)sender).Name+"を削除します。");//イベントを察知したらButtonの名前を表示 foreach (Button bt in arbtn) //リストを使ってクリックした { // Buttonを削除します。 if((((Button)sender).Name)==bt.Name){ this.Controls.Remove(bt); } } } private void button1_Click(object sender, EventArgs e) { this.Controls.Remove(btn[h]);//上のボタンから順番に削除します。 h += 1; if (h == 5) { MessageBox.Show("消去するボタンがありません。"); button1.Enabled = false; return; } } private void button2_Click(object sender, EventArgs e) { for (int k = 0; k < 5; ++k) { this.Controls.Remove(btn[k]); //配列を使ってすべて消す Removeを使った例です } button2.Enabled = false; } }
その他の回答 (6)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
for文が3重の場合の例です。 List<TextBox> artxt = new List<TextBox>(); TextBox widbx = new TextBox(); private void Form1_Shown(object sender, EventArgs e) { this.BackColor = Color.Aqua; int num = 0; for (int h = 0; h < 3; ++h) for (int i = 0; i < 3; ++i) for (int k = 0; k < 2; ++k) { { num += 1; TextBox txtbx = new TextBox(); txtbx.Size = new Size(65, 20); txtbx.Name = "TextBox" + num; txtbx.Location = new Point(20 + i * 70, 20 + k * 25 + h * 60); artxt.Add(txtbx); this.Controls.Add(txtbx); txtbx.TextChanged += new EventHandler(TXT_CHANGE); } } widbx.Multiline = true; widbx.Location = new Point(0, 200); widbx.Size = new Size(this.Width, 200); this.Controls.Add(widbx); } private void TXT_CHANGE(object sender, EventArgs e) { widbx.Text = ""; foreach (TextBox bx in artxt)//配列の要素のようにも使用できます { if (bx.Text != "") { widbx.Text += bx.Text + Environment.NewLine; } } }
お礼
おお ありがとうございます Listってすごいんですねぇ 基本ほとんどわかってない状態なんで ホント助かりました いままで 配列だけで作ってたので Listの存在はでかいです。 C# というか プログラミングを初めてから こんなに感激したのは初めてです。
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
再びです。 リストの例です。 List<TextBox> arbx=new List<TextBox>(); private void Form1_Shown(object sender, EventArgs e) { for(int i=0;i<5;++i){ TextBox txtbx = new TextBox(); txtbx.Location = new Point(10, 10 + 25 * i); txtbx.Size = new Size(100, 20); arbx.Add(txtbx); this.Controls.Add(txtbx); txtbx.TextChanged += new EventHandler(TXT_CHANGE); } } private void TXT_CHANGE(object sender, EventArgs e) { int num = 0; for (int k = 0; k < 4; ++k) { if (arbx[k].Text != "")//arbx[k] 通常のTextBoxのように使用できます { num += int.Parse(arbx[k].Text);//arbx[k] 通常のTextBoxのように使用できます } } arbx[4].Text ="合計は " + num.ToString()//arbx[4] 通常のTextBoxのように使用できます } }
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
お返事有難うございます。 コントロールを作成する場合、配列を使わなくても、for文を2重3重にすれば、横にも縦にもコントロールを追加することができますし、後で利用する場合、キャストする必要もありません、さらに配列と違って、初めからメンバが沢山揃っています。 >List や arraylist 私はC#やVB.NETはまだ使いはじめて間もないのですが、最初ず~っと「arraylist」を使ってましたが、なんか最近は「arraylist」は使われていないようです。それはそ~ですよね「List」の方がず~っと強力ですから 下記は配列を使わないで、前回と同じ動作をします。 List<Button> arbtn= new List<Button> (); int h; private void Form1_Shown(object sender, EventArgs e) { for (int i = 0; i < 5; ++i)//普通にループするだけです。配列の初期化は必要ありません { Button btn = new Button(); btn.Size=new Size(100,40); btn.Location = new Point(50, 80 + 45 * i); btn.Text = "Button" + (3 + i).ToString();//3+はbutton1とbutton2を追加したためです btn.Name = "Button" +(3+ i).ToString(); arbtn.Add(btn); //リストにAddする。 this.Controls.Add(btn); btn.Click += new EventHandler(BTN_CLICK); button1.Text = "一個ずつ消す"; button2.Text = "すべて消す"; } } private void BTN_CLICK(object sender, EventArgs e){ MessageBox.Show(((Button)sender).Name+"を削除します。");//イベントを察知したらButtonの名前を表示 foreach (Button bt in arbtn) //リストを使ってクリックした { // Buttonを削除します。 if((((Button)sender).Name)==bt.Name){ this.Controls.Remove(bt); } } } private void button1_Click(object sender, EventArgs e) { this.Controls.Remove(arbtn[h]);//上のボタンから順番に削除します。 h += 1; if (h == 5) { MessageBox.Show("消去するボタンがありません。"); button1.Enabled = false; return; } } private void button2_Click(object sender, EventArgs e) { for (int k = 0; k < 5; ++k) { this.Controls.Remove(arbtn[k]); //すべて消す Removeを使った例です } button2.Enabled = false; } } }
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
すいません コメントに 「インデックスを使って一個ずつ消す RemoveAtを使った例です」と書きましたが、「Remove」でしたごめんなさい。
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんにちは >一度作ったボタンを消す方法 #ボタンの名前で消去する方法 #インデックスを使って消去する方法 #配列の要素を使って消去する方法 等々いろいろありますが、配列を使った例のサンプルを作成しました。 >1,一個ずつ消していく方法 >2,一回で作ったものをすべて消す方法 上記の2通りのテストのために、「button1」「button2」を貼り付けています。 Button[] btn; int h; private void Form1_Shown(object sender, EventArgs e) { btn = new Button[5];//配列の初期化 for (int i = 0; i < 5; ++i) { btn[i] = new Button(); btn[i].Size=new Size(100,40); btn[i].Location = new Point(50, 80 + 45 * i); btn[i].Text = "Button" + (3 + i).ToString();//3+はbutton1とbutton2を追加したためです btn[i].Name = "Button" +(3+ i).ToString(); this.Controls.Add(btn[i]); btn[i].Click += new EventHandler(BTN_CLICK); button1.Text = "一個ずつ消す"; button2.Text = "すべて消す"; } } private void BTN_CLICK(object sender, EventArgs e){ MessageBox.Show(((Button)sender).Name);//イベントを察知したらButtonの名前を表示 } private void button1_Click(object sender, EventArgs e) { this.Controls.Remove(btn[h]);//インでクスを使って一個ずつ消す RemoveAtを使った例です h += 1; if (h == 5) { MessageBox.Show("消去するボタンがありません。"); button1.Enabled = false; return; } } private void button2_Click(object sender, EventArgs e) { for (int k = 0; k < 5; ++k) { this.Controls.Remove(btn[k]); //配列を使ってすべて消す Removeを使った例です } button2.Enabled = false; } }
お礼
ありがとうございます。 this.Controls.Removeっていうものがあたんですね しりませんでした。 自分は 配列がギリギリ理解できて List や arraylist など はまだまったく わかってない状態です。 もしよろしければ Listを使った文も見てみたいのですが どうでしょうか? もしお時間があるならば よろしくお願いいたします。 なければスルーでも構いませんので。