• 締切済み

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

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

みんなの回答

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

たとえばこんなような感じですかね? private PictureBox[] pictArray = new PictureBox[100]; public Form1() { InitializeComponent(); PictureBox pict; int nIdx = 0; while (nIdx < pictArray.Length) { pict = new PictureBox(); pictArray[nIdx] = pict; pict.Click += new EventHandler(pict_Click); nIdx++; } } private void pict_Click(object sender, EventArgs e) { PictureBox pict; int nIdx = pictArray.Length - 1; while (nIdx >= 0) { pict = pictArray[nIdx]; if (pict == sender) { break; } nIdx--; } // nIdxが0以上なら該当インデックス // nIdxが0未満なら該当なし }

kiyo061
質問者

お礼

ご回答ありがとうございます。 参考にしながらプログラムしています。 if (pict == sender) { break; } の(pict == sender)の意味が良く分からないのですが 教えていただけないでしょうか?

回答No.1

PictureBoxのTagプロパティにインデックスを仕込んでおくのはどうでしょうか?

kiyo061
質問者

お礼

ご回答ありがとうございます。 勉強になりました。

関連するQ&A

  • 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; } 誰か解決策を教えていただけないでしょうか? よろしくお願いします。

  • 【C#】Nameの取得について

    いつもお世話になります。 C#に関して質問です。 visualC#2008を使っています。 今、pictureboxを縦に順に表示させていくと同時に、一つ一つのpictureboxに名前を付ける処理をプログラムしています。 今度は、その名前をMessageBoxで取得するプログラムを作成しようとしているのですが、うまくいきません。 hanpuku_pic_Click_1で新しくhanpuku_picをインスタンス作成するとメッセージが空白になってしまいます。 誰か解決策をお願いします。 プログラムは下記のように書いているところです private void hanpuku_Click(object sender, EventArgs e) { this.SuspendLayout(); Array.Resize(ref this.hanpuku_array, this.hanpuku_array.Length + 1); PictureBox hanpuku_pic = new PictureBox(); hanpuku_array[this.hanpuku_array.Length - 1] = hanpuku_pic; hanpuku_pic.Name = "hanpuku_pic" + this.hanpuku_array.Length.ToString(); hanpuku_pic.Location = new Point(xx, 90 * (hanpuku_array.Length - 1)); hanpuku_pic.BackColor = System.Drawing.SystemColors.Window; hanpuku_pic.Size = new System.Drawing.Size(160, 70); hanpuku_pic.BringToFront(); hanpuku_pic.Image = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\algorithm\algorithm\picture\反復箱.png"); hanpuku_pic.SizeMode = PictureBoxSizeMode.StretchImage; hanpuku_pic.Click += new EventHandler(hanpuku_pic_Click_1); this.ResumeLayout(false); this.PerformLayout(); this.panel1.Controls.Add(hanpuku_pic); } private void hanpuku_pic_Click_1(object sender, EventArgs e) { MessageBox.Show(hanpuku_pic.Name); }

  • ピクチャボックスのクリックイベント

    ピクチャボックスのクリックイベント Visual C#でトランプゲームを作っているのですが this.PB = new System.Windows.Forms.PictureBox[54]; ↑のようにピクチャボックスの配列作ったのですが それぞれのクリックイベントを作りたいのですが、それがどうしても分かりません たとえばPB[30]がクリックされたらPB[30]の画像を他のピクチャボックスに移すなど このようなことをするにはどうすればいいですか?

  • C#でのコントロール配列について

    C#でのコントロール配列について ピクチャーボックスを配列にして動的生成しています (日本語おかしい…?) そこで質問です。 あるピクチャーボックスをクリックすると クリックされたピクチャーボックスの値(?)とかを取得 (たとえば、Nameとか) 1つだけの場合なら、イベントのClickでできたんですが 配列にすると、どうすればいいのかわからなくなりました わかりやすいサイトとかあったら教えてください!

  • C# のクリックイベント

    別のイベントからクリックイベントを発生させるのに Button1.PerformClick(); は、うまくいくのですが、 これがピクチャーボックスになったとき pictureBox1.PerformClick(); 下記のエラーが出てしまいます。 ピクチャーボックスのボタンクリックイベントを発生させる方法はないでしょうか? 'System.Windows.Forms.PictureBox' に 'PerformClick' の定義が含まれておらず、型 'System.Windows.Forms.PictureBox' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

  • ピクチャボックスの座標取得

    Microsoft Visual Studio 2008のスマートデバイス用で、PDA用のプログラミングを開発しています。 フォーム上にピクチャボックスを貼りつけ、画像表示をできるようにしています で、やりたいことは・・ Private Sub PictureBox1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles PictureBox1.MouseUp 'ピクチャボックスの座標を表示させる     End Sub Private pos As Pointで宣言しておき、 pos.X = e.X pos.Y = e.Y でやると、どうも、フォームの座標が取得されてしまうようです ピクチャの画像は拡大・縮小をできるようにしてあるため、フォーム座標=ピクチャ座標にはなりません ピクチャボックスの座標を取得するにはどのようにしたらよいのか、ご教授願います

  • Visual C++ でコントロールを配列にする方法

    VisualC++を使い始めて楽しさを覚え始めた頃ですが、壁にぶつかり解決できません。よろしくお願いいたします。 Windowsフォーム作成において、ボタンやラベルなど、ツールボックスからドロップできるコントロールを配列にする方法が分かりません。 ためしにボタンを二つは配置してから、Button1とButton2がButton[0]とButton[1]になるように定義から書き直してみましたが、 private: System::Windows::Forms::Button^ button[2]; の行で、 「: error C2728: 'System::Windows::Forms::Button ^ : ネイティブ配列はこのマネージ型を含むことはできません”」 とエラーがでます。 どうすれば、コントロールの配列を作れるのでしょうか。できるだけ簡単な方法(できればVisualC++の機能でGUIでサクッと作れれば良いのですが)をご教授願います。 過去の質問に似たものがありましたが、参照先のリンクが切れていました。。

  • C#でピクチャーボックスへの文字列描画について

    C#でピクチャーボックスへの文字列描画について DOBON.NETからコピペです //PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); string drawString= @"智に働けば角が立つ。情に棹させば流される。 意地を通せば窮屈だ。とかくに人の世は住みにくい。"; //Fontを作成 Font fnt = new Font("MS ゴシック", 12); //文字列を表示する範囲を指定する RectangleF rect = new RectangleF(10, 10, 100, 200); //rectの四角を描く g.FillRectangle(Brushes.White, rect); //文字を書く g.DrawString(drawString, fnt, Brushes.Black, rect); //リソースを開放する fnt.Dispose(); g.Dispose(); 自分で使ってるピクチャーボックスは動的生成してるので picbox[i] という感じになってます この場合 初めの宣言の時は picbox = new System.Windows.Forms.PictureBox[pic_cnt]; for (i = 0; i < n) { picbox[i] = new System.Windows.Forms.PictureBox(); Graphics g = picbox[i].CreateGraphics(); <中略> } で大丈夫なのでしょうか? 文字列は描画されないし、エラーもでないので どこが間違っているのかわかりません… 説明不足のところがあれば書いてください あと、修復場所を指摘してくださればありがたいです

  • 挿入されている画像をクリアする(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」です。と出力する) 難しすぎて全く分かりません・・・。  どなたかご教授願いします┏○