C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: ループでpictureBoxを作成


(過去ログ 60 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■34652 / inTopicNo.1)  ループでpictureBoxを作成
  
□投稿者/ マジンガー (1回)-(2009/04/05(Sun) 00:17:39)

分類:[C#] 

こんばんは、お世話になります。
現在、現在C#を勉強しています。

環境:OS WindowsXP SP3
   エディタ VisualStudio C# 2008 Express Edition

画像をpictureBoxに表示しようと考えています。
画像の数はわからないので、pictureBoxをループで作成し、順次表示しようとしています。
string[] files = Directory.GetFiles(@"c:\tmp", "*.jpg");
for (int i = 0; i < files.Length; i++)	{

this.pictureBox[i] = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox[i])).BeginInit();
this.pictureBox[i].Location = new System.Drawing.Point(33 + i*10, 36 + i*10);
this.pictureBox[i].Name = "pictureBox[i]";
this.pictureBox[i].Size = new System.Drawing.Size(200, 200);
this.pictureBox[i].TabIndex = 0;
this.pictureBox[i].TabStop = false;
pictureBox[i].Image = Bitmap.FromFile(files[i]);

}

ところがこうしたところ、
角かっこ [] 付きインデックスを 'System.Windows.Forms.PictureBox' 型の式に適用することはできません。
とエラーになっています。
どのように対処したらよいのでしょう?
ご教示いただけないでしょうか。

引用返信 編集キー/
■34653 / inTopicNo.2)  Re[1]: ループでpictureBoxを作成
□投稿者/ 倉田 有大 (521回)-(2009/04/05(Sun) 01:02:55)
2009/04/05(Sun) 01:03:07 編集(投稿者)
 public partial class Form1 : Form
    {
        PictureBox[] pictureBox;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox = new PictureBox[10];
            for (int i = 0; i < 10; i++)
            {
                this.pictureBox[i] = new System.Windows.Forms.PictureBox();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox[i])).BeginInit();
                this.pictureBox[i].Location = new System.Drawing.Point(33 + i * 10, 36 + i * 10);
                this.pictureBox[i].Name = "pictureBox[i]";
                this.pictureBox[i].Size = new System.Drawing.Size(200, 200);
                this.pictureBox[i].TabIndex = 0;
                this.pictureBox[i].TabStop = false;
            }

        }
    }

ソースちょっとかえて実行したけどエラーなんてでなかったよ。

>this.pictureBox[i].Name = "pictureBox[i]";

後、ここ間違えてます、

引用返信 編集キー/
■34654 / inTopicNo.3)  Re[2]: ループでpictureBoxを作成
□投稿者/ マジンガー (2回)-(2009/04/05(Sun) 01:42:05)
早速ありがとうございました。
エラーがなくなりました。
が、次のようにフォルダとファイルを指定して起動すると、ファイルは読み込まれず、単に空のフォームが動くだけです。
どこが抜けているのか、アドバイスいただけないでしょうか。

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;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        PictureBox[] pictureBox;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox = new PictureBox[10];
            string imageDir = @"c:\tmp";
            string[] files = Directory.GetFiles(imageDir, "*.jpg");
            for (int i = 0; i < 10; i++)
            {
                //MessageBox.Show(files[i]);
                this.pictureBox[i] = new System.Windows.Forms.PictureBox();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox[i])).BeginInit();
                this.pictureBox[i].Location = new System.Drawing.Point(33 + i * 10, 36 + i * 10);
                this.pictureBox[i].Name = "pictureBox[i]";
                this.pictureBox[i].Size = new System.Drawing.Size(200, 200);
                this.pictureBox[i].TabIndex = 0;
                this.pictureBox[i].TabStop = false;
                this.pictureBox[i].Image = Bitmap.FromFile(files[i]);


            }
        }
    }
}

引用返信 編集キー/
■34655 / inTopicNo.4)  Re[3]: ループでpictureBoxを作成
□投稿者/ 倉田 有大 (522回)-(2009/04/05(Sun) 01:50:05)
this.pictureBox[i].Image = Bitmap.FromFile(files[i]);
this.Controls.Add(this.pictureBox[i]);
↑これね。

フォームにちゃんと足してあげましょう〜

引用返信 編集キー/
■34656 / inTopicNo.5)  Re[4]: ループでpictureBoxを作成
□投稿者/ マジンガー (3回)-(2009/04/05(Sun) 02:09:09)
なるほど〜。ありがとうございました。できました。

解決済み
引用返信 編集キー/
■34657 / inTopicNo.6)  Re[5]: ループでpictureBoxを作成
□投稿者/ マジンガー (4回)-(2009/04/05(Sun) 02:46:36)
もひとつついでにお願いします。
その表示した画像をクリックしたら、実画像を開きたいと考えました。
で、画像のパスを名前にして、イベントフラグを登録しました。
this.pictureBox[i].Name = Path.GetFullPath(files[i]);
this.pictureBox[i].Click += new System.EventHandler(this.pictureBox[i]_Click);


あとはそれを呼び出すメソッドを書くのですが、
private void pictureBox[i]_Click(object sender, EventArgs e)
{
	Process.Start(pictureBox[i].Name.ToString());
}
と書いたところ、当然予想はできたのですが、[i]がないので、
「不適切な配列の宣言子: マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します。」
など、ぞろぞろとエラーが。
こういうときにはどうしたらよいものでしょう?

引用返信 編集キー/
■34659 / inTopicNo.7)  Re[6]: ループでpictureBoxを作成
□投稿者/ 倉田 有大 (523回)-(2009/04/05(Sun) 03:56:21)
PictureBox p = sender as PictureBox;
Process.Start(p.Name.ToString());

試してないけどこれでどうですか。
引用返信 編集キー/
■34661 / inTopicNo.8)  Re[7]: ループでpictureBoxを作成
□投稿者/ マジンガー (5回)-(2009/04/05(Sun) 07:52:39)
早速試して、うまくいきました。
sender asという書き方は初めてで、senderという引数をこう使うのかということも勉強になりました。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -