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

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

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

Re[1]: 保存されている全ての写真を表示する方法


(過去ログ 74 を表示中)

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

■43573 / inTopicNo.1)  保存されている全ての写真を表示する方法
  
□投稿者/ はっちゃん (1回)-(2009/11/12(Thu) 22:15:32)

分類:[C#] 

開発環境・使用言語のバージョン
WinXP・VisualStudio 2008 Professional

C#を使用して写真を整理・編集・印刷をするソフトを作成していますが、最初からつまずいています。
画面構成としては、Formに「メニューに戻る」ボタンだけがある状態で保存されています。
このFormを開いた時(Form_Load)に動的にボタンが隠れない程度に動的にPanelを配置し、そのPanel上に写真の枚数分GroupBoxを表示させます。
GroupBoxの中身は、「PictureBox」×1個、「TextBox(写真のファイル名入力用)」×1個、「CheckBox」×1個です。
現在の状況は、Panel上にGroupBoxが写真の枚数分表示されているが、GroupBoxの中身が表示されているのは1つ目のGroupBoxだけです。(写真は、配列の最初に入っているものだけ表示されています)
全てのGroupBoxの中身を表示させるには、どのようにしたらよろしいでしょうか?
どなたかご教示下さい。
よろしくお願いします。
最後に、現状のコードを提示します。



<現状のコード>

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 写真管理システム
{
    public partial class form写真選択 : Form
    {
        public form写真選択()
        {
            InitializeComponent();
        }

        private void button戻る_Click(object sender, EventArgs e)
        {
            formMenu MenuForm = new formMenu();
            MenuForm.Show();
            this.Hide();
        }

        // 各コントロールのフィールドを作成
        private Panel PanelPicture;                 // パネルコントロール
        private GroupBox[] GroupBoxPictures;        // グループボックスコントロール
        private PictureBox[] PictureBoxPictures;    // ピクチャーボックスコントロール
        private TextBox[] TextBoxFileNames;         // テキストボックスコントロール
        private CheckBox[] CheckBoxSelects;         // チェックボックスコントロール

        private void form写真選択_Load(object sender, EventArgs e)
        {
            int x_pos = 10, y_pos = 10, index = 0, FileCount = 0, count = 0, row = 0;
            const string PicCardDirectory = "G:\\DCIM\\100CDPFP\\";
            string[] CardFile = new string[5];

            // "G:\DCIM\100CDPFP"以下のファイルをすべて取得
            string[] Cardfiles = Directory.GetFiles(PicCardDirectory, "*", SearchOption.AllDirectories);

            // ファイル数をカウントする
            foreach (string CardN in Cardfiles)
            {
                //CardFile = CardN.Split('\\');
                FileCount++;
            }

            // 各コントロール/コントロール配列の作成
            this.PanelPicture = new Panel();                        // パネルコントロール
            this.GroupBoxPictures = new GroupBox[FileCount];        // グループボックスコントロール配列
            this.PictureBoxPictures = new PictureBox[FileCount];    // ピクチャーボックスコントロール配列
            this.TextBoxFileNames = new TextBox[FileCount];         // テキストボックスコントロール配列
            this.CheckBoxSelects = new CheckBox[FileCount];         // チェックボックスコントロール配列

            this.SuspendLayout();

            // パネルコントロールのインスタンスを作成し、プロパティを作成する
            this.PanelPicture.Controls.AddRange(GroupBoxPictures);
            PanelPicture.AutoScrollMargin = new Size(10, 10);
            PanelPicture.AutoScroll = true;
            PanelPicture.BackColor = Color.LightGray;
            PanelPicture.Location = new Point(0, 0);
            PanelPicture.Size = new Size(1016, 600);
            this.Controls.Add(this.PanelPicture);

            for (index = 0; index < FileCount; index++)
            {
                CardFile = Cardfiles[index].Split('\\');
                
                // グループボックスコントロール配列のインスタンスを作成し、プロパティを作成する
                this.GroupBoxPictures[index] = new GroupBox();
                this.GroupBoxPictures[index].Controls.Add(PictureBoxPictures[index]);
                this.GroupBoxPictures[index].Controls.Add(TextBoxFileNames[index]);
                this.GroupBoxPictures[index].Controls.Add(CheckBoxSelects[index]);
                this.GroupBoxPictures[index].BackColor = Color.White;
                this.GroupBoxPictures[index].Font = new Font("MS Pゴシック", 12F, FontStyle.Bold, GraphicsUnit.Point, ((byte)(128)));
                this.GroupBoxPictures[index].Size = new Size(240, 200);
                this.GroupBoxPictures[index].Location = new Point(x_pos, y_pos);
                this.GroupBoxPictures[index].Text = "Picture" + Convert.ToString(index + 1);
                this.GroupBoxPictures[index].Name = "GroupBoxPicture" + Convert.ToString(index + 1);
                PanelPicture.Controls.Add(GroupBoxPictures[index]);

                // ピクチャーボックスコントロール配列のインスタンスを作成し、プロパティを作成する
                this.PictureBoxPictures[index] = new PictureBox();
                this.PictureBoxPictures[index].BorderStyle = BorderStyle.Fixed3D;
                this.PictureBoxPictures[index].BackgroundImage = Image.FromFile(Cardfiles[index]);
                this.PictureBoxPictures[index].Size = new Size(200, 130);
                this.PictureBoxPictures[index].SizeMode = PictureBoxSizeMode.StretchImage;
                this.PictureBoxPictures[index].Location = new Point(x_pos + 10, y_pos + 10);
                this.PictureBoxPictures[index].BackgroundImageLayout = ImageLayout.Stretch;
                this.PictureBoxPictures[index].Name = "PictureBoxPicture" + Convert.ToString(index + 1);
                GroupBoxPictures[index].Controls.Add(PictureBoxPictures[index]);

                // テキストボックスコントロール配列のインスタンスを作成し、プロパティを作成する
                this.TextBoxFileNames[index] = new TextBox();
                this.TextBoxFileNames[index].BackColor = Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
                this.TextBoxFileNames[index].Font = new Font("MS Pゴシック", 12F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(128)));
                this.TextBoxFileNames[index].Location = new Point(x_pos + 10, y_pos + 150);
                this.TextBoxFileNames[index].Size = new Size(150, 51);
                this.TextBoxFileNames[index].Text = CardFile[3];
                this.TextBoxFileNames[index].TextAlign = HorizontalAlignment.Center;
                this.TextBoxFileNames[index].Name = "TextBoxFileName" + Convert.ToString(index + 1);
                GroupBoxPictures[index].Controls.Add(TextBoxFileNames[index]);

                // チェックボックスコントロール配列のインスタンスを作成し、プロパティを作成する
                this.CheckBoxSelects[index] = new CheckBox();
                this.CheckBoxSelects[index].AutoSize = true;
                this.CheckBoxSelects[index].Location = new Point(x_pos + 178, y_pos + 155);
                this.CheckBoxSelects[index].Size = new Size(80, 16);
                this.CheckBoxSelects[index].UseVisualStyleBackColor = true;
                this.CheckBoxSelects[index].Name = "CheckBoxSelect" + Convert.ToString(index + 1);
                GroupBoxPictures[index].Controls.Add(CheckBoxSelects[index]);

                x_pos += 246;
                count++;

                if (count > 3)
                {
                    count = 0;
                    x_pos = 10;
                    ++row;
                    y_pos = row * 210 + 10;
                }
            }
            this.ResumeLayout(false);
        }
    }
}

引用返信 編集キー/
■43590 / inTopicNo.2)  Re[1]: 保存されている全ての写真を表示する方法
□投稿者/ (報告) (3回)-(2009/11/13(Fri) 00:33:21)
No43573 (はっちゃん さん) に返信

  マルチポスト
  http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=25791&rev=&no=0

引用返信 編集キー/
■43594 / inTopicNo.3)  Re[1]: 保存されている全ての写真を表示する方法
□投稿者/ もりお (123回)-(2009/11/13(Fri) 01:32:53)
No43573 (はっちゃん さん) に返信
> this.PictureBoxPictures[index].Location = new Point(x_pos + 10, y_pos + 10);

.NET Framework クラス ライブラリ
    Control.Location プロパティ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.location.aspx

「コンテナの左上隅に対する相対座標として、コントロールの左上隅の座標を取得または設定します。」とありますので
親のコントロールである GroupBox からの相対位置を指定されてみてはいかがでしょうか。
こんな感じです。
this.PictureBoxPictures[index].Location = new Point( 10, 10 );

本題とはあまり関係ありませんが、
GroupBox, PictureBox, TextBox, CheckBox を UserControl として1つにまとめると
コードをシンプルに出来そうです。

引用返信 編集キー/
■43624 / inTopicNo.4)  Re[1]: 保存されている全ての写真を表示する方法
□投稿者/ Jitta on the way (478回)-(2009/11/13(Fri) 18:42:41)
ListView をチェックボックス付きで使えばいいんじゃないかなぁ?
引用返信 編集キー/
■43632 / inTopicNo.5)  Re[2]: 保存されている全ての写真を表示する方法
□投稿者/ はっちゃん (2回)-(2009/11/13(Fri) 23:45:41)
No43594 (もりお さん) に返信
> ■No43573 (はっちゃん さん) に返信
>>this.PictureBoxPictures[index].Location = new Point(x_pos + 10, y_pos + 10);
>
> .NET Framework クラス ライブラリ
> Control.Location プロパティ
> http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.location.aspx
>
> 「コンテナの左上隅に対する相対座標として、コントロールの左上隅の座標を取得または設定します。」とありますので
> 親のコントロールである GroupBox からの相対位置を指定されてみてはいかがでしょうか。
> こんな感じです。
> this.PictureBoxPictures[index].Location = new Point( 10, 10 );
>
> 本題とはあまり関係ありませんが、
> GroupBox, PictureBox, TextBox, CheckBox を UserControl として1つにまとめると
> コードをシンプルに出来そうです。


ご回答、ありがとうございます。

> this.PictureBoxPictures[index].Location = new Point( 10, 10 );

この方法で全ての写真を表示することが出来ました。

> GroupBox, PictureBox, TextBox, CheckBox を UserControl として1つにまとめると
> コードをシンプルに出来そうです。

こちらの方法も、使ってみようと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -