0

以下に示すように、Windowsフォームアプリを開発しています。スクリーンショットをキャプチャし、それらをサムネイル ストアとしてピクチャ ボックスに (動的に) 表示し、[コントロールの追加] ボタンのすぐ上にある FlowLayoutPanel に追加します。私はこれをやった。

FlowLayoutPanel の上で、それぞれの画像ボックス コントロールをクリックするとサムネイルが拡大表示されるようにします。動的に生成された画像ボックスにアクセスできなくなったことに気付きました。

誰かがそれを達成するのを手伝ってくれますか?

ここに画像の説明を入力

ここに画像の説明を入力

    namespace Snapper
{
    public partial class Main : Form
    {
        static int imgCounter = 0;//keeps track of img for naming
        public Main()
        {
            InitializeComponent();
        }

        private void TestFlowButton_Click(object sender, EventArgs e)
        {            
            CaptureScreen();
        }

        private void CaptureScreen()
        { 
            /*This method captures a snapshot of screen and 
             * adds it to the ImageFlowLayoutPanel
             */             

            Rectangle bounds = Screen.GetBounds(Point.Empty);
            Bitmap bmp = new Bitmap(bounds.Width,bounds.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size); 
            imgCounter += 1;
            bmp.Save("snap" + imgCounter.ToString() + ".jpg", ImageFormat.Jpeg);

            //creating a picturebox control and add it to the flowlayoutpanel
            PictureBox tempPictureBox = new PictureBox();                

            //generates a thumbnail image of specified size
            tempPictureBox.Image = bmp.GetThumbnailImage(100,100,
                                   new Image.GetThumbnailImageAbort(ThumbnailCallback),
                                   IntPtr.Zero);
            tempPictureBox.Size = new System.Drawing.Size(100, 100);
            tempPictureBox.Click += new EventHandler(this.tempPictureBox_Click);                             
            ImageFlowLayoutPanel.Controls.Add(tempPictureBox);

        }

        //This click event will be used to display the enlarged images
        private void tempPictureBox_Click(object sender, EventArgs e)
        {            
            PreviewPictureBox.Image = ((PictureBox)sender).Image;
        }
        public bool ThumbnailCallback()
        {
            return true;
        }
    }
}
4

2 に答える 2

2

Click動的に追加されたピクチャボックスに設定すると、イベントでアクセスできます。

tempPictureBox.Click += new ...

次に、Clickビジュアルスタジオが生成するメソッドに、object senderパラメーターがあります。をキャストするsender as PictureBox必要があり、その後アクセスできます。

于 2013-01-30T17:27:08.300 に答える
2

OK、PictureBox のクリック イベントを使用する更新されたコードを次に示します。

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        static int imgCounter = 0;//keeps track of img for naming
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CaptureScreen();
        } 

        private void tempPictureBox_Click(object sender, EventArgs e)
        {
            //Put code here
        }

        private void CaptureScreen()
        {
            /*This method captures a snapshot of screen and 
             * adds it to the ImageFlowLayoutPanel
             */

            Rectangle bounds = Screen.GetBounds(Point.Empty);
            Bitmap bmp = new Bitmap(bounds.Width, bounds.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
            imgCounter += 1;
            bmp.Save("snap" + imgCounter.ToString() + ".jpg", ImageFormat.Jpeg);

            //creating a picturebox control and add it to the flowlayoutpanel
            PictureBox tempPictureBox = new PictureBox();

            //generates a thumbnail image of specified size
            tempPictureBox.Image = bmp.GetThumbnailImage(100, 100,
                               new Image.GetThumbnailImageAbort(ThumbnailCallback),
                               IntPtr.Zero);
            tempPictureBox.Size = new System.Drawing.Size(100, 100);
            tempPictureBox.Click += new System.EventHandler(this.tempPictureBox_Click);
            tempPictureBox.Cursor = System.Windows.Forms.Cursors.Hand;
            flowLayoutPanel1.Controls.Add(tempPictureBox);

        }
        public bool ThumbnailCallback()
        {
            return true;
        }
    }
}

また、少しおかしなことをして、ピクチャ ボックス カーソルを手の形にしたことに注意してください。必要に応じて変更できます。

要約すると、拡大イベントを次のように入れます。

private void tempPictureBox_Click(object sender, EventArgs e)
{
    //Put code here
}

幸運を!

于 2013-01-30T18:03:28.207 に答える