• 締切済み

pictureboxの表示について

いつもお世話になります。 C#について質問です。VisualC#2008を使っています。 private PictureBox[] pictArray = new PictureBox[100]; private void Box_Load() { PictureBox pict; int nIdx = 0; while (nIdx < pictArray.Length) { pict = new PictureBox(); pictArray[nIdx] = pict; pict.Click += new EventHandler(pict_Click); nIdx++; } } のように、あるメソッドで配列にpictureboxの画像を代入(?)していく処理をしています。このメソッドを別のメソッドで呼び出し、 pictArray[1]に格納されているpicturebox pictArray[2]に格納されているpicturebox  …といった具合に、次々と表示させていきたいと考えています。しかし1つしかpictureboxが表示されません。具体的には以下のようなプログラムを組んでいるところです。 private void pict_Click(object sender, EventArgs e) { Box_Load(); kihon_pict.Location = new Point(10, yy); this.panel1.Controls.Add(pict); yy += 40; } 誰か解決策を教えていただけないでしょうか? よろしくお願いします。

みんなの回答

回答No.1

 こんばんは。  う~む、多分、フォームと同じ「ねずみ色」だから気付かないのかもしれません。  派手な色を着色するか、枠を目立つスタイルにすれば確認出来るのではないでしょうか。  以下はボタンを押す度、ピクチャーボックスを縦に並べていきます。 //配列数は0で構わない private PictureBox[] pictArray = new PictureBox[0]; private void button1_Click(object sender, EventArgs e) { this.SuspendLayout(); //配列の拡大 Array.Resize(ref this.pictArray, this.pictArray.Length + 1); //ピクチャボックスの作成 PictureBox picture = new PictureBox(); //配列にピクチャーボックスを代入 pictArray[this.pictArray.Length - 1] = picture; //ピクチャーボックスに名前を付ける(多分必須) picture.Name = "picture box " + this.pictArray.Length.ToString(); //位置を指定する picture.Location = new Point(0, 40 * (this.pictArray.Length - 1)); //大きさを指定する picture.Size = new Size(40, 40); //枠のスタイルを派手にする picture.BorderStyle = BorderStyle.Fixed3D; //色を派手にする picture.BackColor = Color.AliceBlue; //コントロールに追加 this.Controls.Add(picture); this.ResumeLayout(false); this.PerformLayout(); //ピクチャーボックスを表示する picture.Show(); }

kiyo061
質問者

お礼

ご回答ありがとうございます。 丁寧なコメントで、とてもわかりやすかったです。 参考になりました!!

関連するQ&A

  • pictureBoxに表示する方法

    始めまして、プログラム作成初心者です。 今、pictureBox1に選択した画像を表示し、ボタンを押すと pictureBox2にpictureBox1の画像を白黒にして表示するプログラムを作成しています。 http://www.bobpowell.net/grayscale.htm のprivate void Form1_Load(object sender, System.EventArgs e) を参考に作ってみようと思っているのですが、 これをpictureBox2に表示するようなプログラムが良くわかりません。 分かられる方、よろしくお願いいたします。

  • 【C#】インデックス番号(?)の取得

    いつもお世話になってます。 C#に関して質問です。 VisualC#2008を使用しています。 private System.Windows.Forms.PictureBox[] kihon_pic = new PictureBox[100]; のように、ピクチャーボックスのコントロール配列を作り、あるピクチャーボックスがクリックされたときに、そのピクチャーボックスのインデックス番号(?)を取得できるようにしたいと思っています。 例えば、クリックされたピクチャーボックスはkihon_pic[4]であるとか、kihon_pic[7]であるとか、そういった具合にです。 誰か方法が分かる人がいましたら、ご回答をよろしくお願いします。

  • C# pictureBox(a)

    Visual C# 2008にて int a = 3; pictureBox(a).Image = Properties.Resources.Icon1_2; みたいな代入の方法がどうしても解りません Properties.Resources.Icon1_2は リソースのIcon1_2.bmpです 過去のQ&A QNo6332332を読んでも解りません。 pictureBoxを貼り付けてダブルクリック Tagを1.などに設定 private void pictureBox1_Click(object sender, EventArgs e) { PictureBox pict = sender as PictureBox; MessageBox.Show(pict.Name); MessageBox.Show(pict.Tag.ToString()); int picb = int.Parse(pict.Tag.ToString()); pictureBox(picb).Image = Properties.Resources.Icon1_2; } 上のようにしたい アドバイスをお願いできませんでしょうか

  • pictureboxの画像を削除するには?

    Visual C# 2008を使用しています。 ボタンを押すとpictureboxに画像が表示されるプログラムを作成しました。 今度は、その表示された画像をクリックし、別のボタンを押すことでその画像が削除できるようにしたいと思っているのですが、うまくプログラムできません。 誰か教えていただけないでしょうか? ソースコードは以下のようになっています。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace algorithm { public partial class Form1 : Form { int space = 10; public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void kihonsyori_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\基本処理箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 50; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void groupBox1_Enter(object sender, EventArgs e) { } private void pictureBox1_Click(object sender, EventArgs e) { } private void hanpuku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\反復箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sentaku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\選択箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sakujyo_Click(object sender, EventArgs e) { pictureBox1.Image = null; space = 0; } } }

  • 【C#】EventArgsについて

    いつもお世話になります。 C#に関して質問です。 VisualC#2008を使っています。 private void Form1_Load(object sender, EventArgs e) などで見かける、EventArgs e とは何を意味しているのでしょうか? 誰か教えていただけませんか? よろしくお願いします。

  • ラベルをピクチャボックスの上に表示させたい

    PictureBox[,] map = new PictureBox[27, 27]; private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { map[i, j] = new PictureBox(); map[i, j].Size = new Size(tate, yoko);//用意する map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす map[i, j].BackColor = Color.Black; this.Controls.Add(map[i, j]);//設置 bom_map[i, j] = 0; } } } ピクチャボックスの場合↑のように記述すると25×25のマップができあがりました。 それぞれのピクチャボックスの上に数字を表示させたいのですがうまくできません ちなみに、この様にソースを書いてみました private System.Windows.Forms.Label[,] label; private void Form1_Load(object sender, EventArgs e) { this.label = new System.Windows.Forms.Label[27, 27]; for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { this.label[i, j] = new System.Windows.Forms.Label(); this.label[i, j].Size = new Size(tate, yoko); this.label[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5); this.label[i, j].Text = Convert.ToString(i * j); this.label[i, j].BackColor = Color.BlanchedAlmond; this.Controls.Add(this.label[i, j]); } } } ピクチャボックスと同じようにかぶせるのかな?と思い書いてみたんですが 何も表示されなくて困っています。 C#初心者なのでよろしくおねがいします。 }

  • C# フォーム追加後、旧フォームを閉じたい

    前略 ・C#で教えてください。 ・Form1 からshowDiag()メソッドでForm2をつくります。Form2が表示されたら非アクティブとなったForm1を閉じたいのですが どのようにしたらよいのかおしえてください。  下記は、Close() メソッドで Form2側から閉じようとしたプログラムですがFrom1を閉じることができません。 よろしくお願いします。 //----------------------------------------------- namespace formClose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); } }   public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { Form1 form1 = new Form1(); form1.Close(); //Form1が閉じない!! } private void button1_Click(object sender, EventArgs e) { this.Close(); //Form2を閉じる }    } } 以上

  • 挿入されている画像をクリアする(VB.2003)

    VB.NET2003 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'ピクチャーボックス1~2のイメージをクリア For Each picBox As PictureBox In New PictureBox() {PictureBox1, PictureBox2} picBox.Image = Nothing Next 'ピクチャーボックス3~4にイメージを設定 PictureBox3.Image = Image.FromFile("C:\image03.jpg") PictureBox4.Image = Image.FromFile("C:\image04.jpg") End Sub Private Sub PictureBox3to4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click, PictureBox4.Click For Each picBox As PictureBox In New PictureBox() {PictureBox1, PictureBox2} If picBox.Image Is Nothing Then picBox.Image = sender.Image Exit Sub End If Next End Sub 上記は、ピクチャーボックス3~4のどれかが押されるとピクチャーボックス1に押された画像が挿入され、 次にピクチャーボックス3~4のどれかが押されると次はピクチャーボックス2に押された画像が挿入されるプログラムなのですが、 ボタン1を押すと、元に戻す「ピクチャーボックス1、2に挿入されている画像があればクリアする」プログラムを 作りたいのですが、サッパリ分かりません。 どなたかご教授願います┏○

  • どこにどの画像が入ったか判定してくれるプログラム(VB.NET2003)

    VB.NET2003 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'ピクチャーボックス1~2のイメージをクリア For Each picBox As PictureBox In New PictureBox() {PictureBox1, PictureBox2} picBox.Image = Nothing Next 'ピクチャーボックス3~4にイメージを設定 PictureBox3.Image = Image.FromFile("C:\image03.jpg") PictureBox4.Image = Image.FromFile("C:\image04.jpg") End Sub Private Sub PictureBox3to4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click, PictureBox4.Click For Each picBox As PictureBox In New PictureBox() {PictureBox1, PictureBox2} If picBox.Image Is Nothing Then picBox.Image = sender.Image Exit Sub End If Next End Sub 上記は、ピクチャーボックス3~4のどれかが押されるとピクチャーボックス1に押された画像が挿入され、 次にピクチャーボックス3~4のどれかが押されると次はピクチャーボックス2に押された画像が挿入されるプログラムなのですが、 あるカードゲームの役判定をするため、どこにどの画像が挿入されたか判定するプログラムを作りたいのですが、 (例えば、ピクチャーボックス1にピクチャーボックス3の画像が挿入されているのなら「1-3」、4なら「1-4」です。と出力する) 難しすぎて全く分かりません・・・。  どなたかご教授願いします┏○

  • 数字をピクチャボックスの上に表示させたい

    質問の内容を書いてくださいPictureBox[,] map = new PictureBox[27, 27]; private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { map[i, j] = new PictureBox(); map[i, j].Size = new Size(tate, yoko);//用意する map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす map[i, j].BackColor = Color.Black; this.Controls.Add(map[i, j]);//設置 bom_map[i, j] = 0; } } } ピクチャボックスの場合↑のように記述すると25×25のマップができあがりました。 それぞれのピクチャボックスの上に数字を表示させたいのですがうまくできません ちなみに、この様にソースを書いてみました private System.Windows.Forms.Label[,] label; private void Form1_Load(object sender, EventArgs e) { this.label = new System.Windows.Forms.Label[27, 27]; for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { this.label[i, j] = new System.Windows.Forms.Label(); this.label[i, j].Size = new Size(tate, yoko); this.label[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5); this.label[i, j].Text = Convert.ToString(i * j); this.label[i, j].BackColor = Color.BlanchedAlmond; this.Controls.Add(this.label[i, j]); } } } ピクチャボックスと同じようにかぶせるのかな?と思い書いてみたんですが 何も表示されなくて困っています。 C#初心者なのでよろしくおねがいします。

専門家に質問してみよう