2016-03-06 29 views
0

我正在設計一個基於靜態圖像的小型交互式室內地圖,並使用gif在它們之間轉換,以模擬3D運動。圖片和gif包含在圖片框中。表單使用按鈕來觸發根據位置持有特定圖像文件的圖片框。基本上每個picturebox都是一面牆,或者用來模仿gif的移動。如何將C#中存儲在類中的圖像文件調用到我的表單中?

現在我能得到這個工作完全使用該按鈕的Click事件中下面的代碼在我的主要形式有:

pboxSCREEN.Image = new Bitmap(Path.Combine(Environment.CurrentDirectory, @"Resources\start2.jpg")); 

不過,我想用單獨類來保存所有圖像文件在變量中,並在我的主表單中使用按鈕的click事件中的方法調用來獲取我需要顯示的圖像。這個想法是爲了讓單獨的類存儲我需要在主窗體中調用的「牆」。到目前爲止,這是我在單獨的類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Windows.Forms; 

namespace TheEldritchTruth 
{ 
public class WallCollection 
{ 
    public Image img1 = null; 

    public WallCollection() 
    { 
     img1 = new Bitmap(Path.Combine(Environment.CurrentDirectory, @"Resources\resident.gif")); 
    } 

    public Image Img1 
    { 
     get { return img1; } 
     set { img1 = value; } 
    } 
} 

}

我設置一個變量通過此舉辦形式類:

public WallCollection walls; 

和初始化工作在Load事件中:

WallCollection walls = new WallCollection(); 

我的問題是 - 我怎樣才能從單獨的類中調用方法但是噸的點擊事件?我試過,沒有運氣幾種不同的方式,到目前爲止,我有這樣的事情:

//FORWARD btn 
    public async void btnForward_Click(object sender, EventArgs e) 
    { 

     if (pos == 0) 
     { 
      pboxSCREEN.Visible = true; 

      pboxSCREEN.Image = walls.Img1;     

      //pBoxItem.Visible = false; 
      pos = 1; 

     }    
    } 

我不能讓你的圖像通過使用這種邏輯來顯示和得到這個錯誤:

"Object reference not set to an instance of an object."

回答

0

要在ForwardBackward中使用圖片按鈕,您不需要有單獨的課程。您可以改用List<Bitmap>

在下面的代碼中,我存儲了所有的位圖int List<Bitmap> bitmaps。當你需要一個位圖,您可以通過索引叫它:bitmaps[0]爲第一的位圖,bitmaps[1]爲第二,...

一個代碼示例:

public partial class Form1 : Form 
{ 
    List<Bitmap> bitmaps = new List<Bitmap>(); 
    int pos = 0; 

    public Form1() 
    { 
     InitializeComponent(); 
     AddBitmaps(); 
     if (bitmaps.Count > 0) 
     { 
      pboxSCREEN.Image = bitmaps[0]; 
     } 
    } 

    void AddBitmaps() 
    { 
     bitmaps.Add(new Bitmap(Path.Combine(Environment.CurrentDirectory, @"Resources\resident.gif"))); 
     bitmaps.Add(new Bitmap(Path.Combine(Environment.CurrentDirectory, @"Resources\start2.jpg"))); 
    } 

    public void btnForward_Click(object sender, EventArgs e) 
    { 

     if (pos > 0 && pos <= bitmaps.Count) 
     { 
      pos--; 
      pboxSCREEN.Visible = true; 
      pboxSCREEN.Image = bitmaps[pos]; 
     } 
    } 

    public void btnBackward_Click(object sender, EventArgs e) 
    { 
     if (pos + 1 < bitmaps.Count) 
     { 
      pos++; 
      pboxSCREEN.Visible = true; 
      pboxSCREEN.Image = bitmaps[pos]; 
     } 
    } 
} 
相關問題