2012-02-27 13 views
3

私はこのPictureBox Arrayプロジェクトを修正したいと思います。 リセットボタンを置いて、作成したPictureBox Arrayのすべてをクリアするよりも、
よりフォームが最初から同じように空になる可能性が高いです。Clear PictureBox - c#

これはコードの一部です。

 // Function to add PictureBox Controls 
    private void AddControls(int cNumber) 
    { 
     imgArray = new System.Windows.Forms.PictureBox[cNumber]; // assign number array 
     for (int i = 0; i < cNumber; i++) 
     { 
      imgArray[i] = new System.Windows.Forms.PictureBox(); // Initialize one variable 
     } 
     // When call this function you determine number of controls 
    } 

    private void ImagesInFolder() 
    { 
     FileInfo FInfo; 
     // Fill the array (imgName) with all images in any folder 
     imgName = Directory.GetFiles(Application.StartupPath + @"\Images"); 
     // How many Picture files in this folder 
     NumOfFiles = imgName.Length; 
     imgExtension = new string[NumOfFiles]; 
     for (int i = 0; i < NumOfFiles; i++) 
     { 
      FInfo = new FileInfo(imgName[i]); 
      imgExtension[i] = FInfo.Extension; // We need to know the Extension 
      // 
     } 
    } 

    private void ShowFolderImages() 
    { 
     int Xpos = 8; 
     int Ypos = 8; 
     Image img; 
     Image.GetThumbnailImageAbort myCallback = 
      new Image.GetThumbnailImageAbort(ThumbnailCallback); 
     MyProgress.Visible = true; 
     MyProgress.Minimum = 1; 
     MyProgress.Maximum = NumOfFiles; 
     MyProgress.Value = 1; 
     MyProgress.Step = 1; 
     string[] Ext = new string [] {".GIF", ".JPG", ".BMP", ".PNG"}; 
     AddControls(NumOfFiles); 
     for (int i = 0; i < NumOfFiles; i++) 
     { 
      switch (imgExtension[i].ToUpper()) 
      { 
       case ".JPG": 
       case ".BMP": 
       case ".GIF": 
       case ".PNG": 
        img = Image.FromFile(imgName[i]); // or img = new Bitmap(imgName[i]); 
        imgArray[i].Image = img.GetThumbnailImage(64, 64, myCallback, IntPtr.Zero); 
        img = null; 
        if (Xpos > 432) // six images in a line 
        { 
         Xpos = 8; // leave eight pixels at Left 
         Ypos = Ypos + 72; // height of image + 8 
        } 
        imgArray[i].Left = Xpos; 
        imgArray[i].Top = Ypos; 
        imgArray[i].Width = 64; 
        imgArray[i].Height = 64; 
        imgArray[i].Visible = true; 
        // Fill the (Tag) with name and full path of image 
        imgArray[i].Tag = imgName[i]; 
        imgArray[i].Click += new System.EventHandler(ClickImage); 
        this.BackPanel.Controls.Add(imgArray[i]); 
        Xpos = Xpos + 72; // width of image + 8 
        Application.DoEvents(); 
        MyProgress.PerformStep(); 
        break; 
      } 
     } 
     MyProgress.Visible = false; 
    } 

    private bool ThumbnailCallback() 
    { 
     return false; 
    } 

    private void btnLoad_Click(object sender, System.EventArgs e) 
    { 
     ImagesInFolder(); // Load images 
     ShowFolderImages(); // Show images on PictureBox array 
     this.Text = "Click wanted image"; 
    } 

どうすればいいですか?

申し訳ありませんリセットボタンのコードはまだありません。
私は何をすべきかわからない、私はC#に新しいです。あなただけのnullに画像を設定することができます

+0

あなたはどのグラフィックインターフェイスを使用していますか? WPF? Winforms?これはC#の質問ではなく、作業しているライブラリの使い方に関するものです。 – Almo

+0

プロジェクトはwinformsを使用します。 –

答えて

2

私はすべてがフレッドになります確認するために、この手順に従います再びコントロールに。 私はこれが誰かに助けてくれることを願っています。

4

private void Clear() 
{ 
    foreach (var pictureBox in imgArray) 
    { 
     pictureBox.Image = null; 
     pictureBox.Invalidate(); 
    } 
} 
0

が他の子コントロールが(実際にあなたのイメージを表示しているコンテナコントロール)this.Backpanelに存在しないと仮定すると、これはおそらく動作します:

private void ClearImages() { 
    this.BackPanel.Controls.Clear(); 
    imgArray = null; 
} 

幸運!あなたがのPictureBoxに描画され、あなたがそれをクリアしたい場合は

private void btnReset_Click(object sender, System.EventArgs e) 
{ 
    for(int x = this.BackPanel.Controls.Count - 1; x >= 0; x--) 
    { 
     if(this.BackPanel.Controls[x].GetType() == typeof(PictureBox)) 
      this.BackPanel.Controls.Remove(x); 
    } 

    for(int x = 0; x < imgArray.Length; x++) 
    { 
     imgArray[x].Image = null; 
     imgArray[x] = null; 
    } 
} 
0

Graphics g = Graphics.FromImage(this.pictureBox1.Image); 
g.Clear(this.pictureBox1.BackColor); 

あなたが描くことができた後