2013-08-01 110 views
0

我在3個不同的圖片框中隨機顯示圖像,並使用計時器控件以某個固定間隔更改它們。計時器控制不工作

當我關閉應用程序並再次打開它時,我得到的圖像是隨機顯示的,但我希望圖像隨機顯示使用計時器,但我不明白爲什麼計時器不工作!我在哪裏做錯了?

Random random = new Random(); 
List<string> filesToShow = new List<string>(); 
List<PictureBox> pictureBoxes; 
public Form2() 
{ 
    InitializeComponent(); 
    Timer timer2 = new Timer();  
    pictureBoxes = new List<PictureBox> { 
     pictureBox3, 
     pictureBox4, 
     pictureBox5 
    }; 
    //ShowRandomImages(); 
    // Setup timer 
    timer2.Interval = 1000; //1000ms = 1sec 
    timer2.Tick += new EventHandler(timer2_Tick); 
    timer2.Start(); 
} 

private void ShowRandomImages() 
{ 
    foreach (var pictureBox in pictureBoxes) 
    { 
     if (!filesToShow.Any()) 
      filesToShow = GetFilesToShow(); 
     int index = random.Next(0, filesToShow.Count); 
     string fileToShow = filesToShow[index]; 
     pictureBox.ImageLocation = fileToShow; 
     filesToShow.RemoveAt(index); 
    } 
} 

private List<string> GetFilesToShow() 
{ 
    string path = @"C:\Users\Monika\Documents\Visual Studio 2010\Projects\StudentModule\StudentModule\Image"; 
    return Directory.GetFiles(path, "*.jpg", SearchOption.TopDirectoryOnly).ToList(); 
} 

private void timer2_Tick(object sender, EventArgs e) 
{ 
    if (sender == timer2) 
    { 
     //Do something cool here 
     ShowRandomImages(); 
    } 

} 
+1

可能是一個範圍的問題,也許? 'timer2'在構造函數中聲明。嘗試在類中聲明它並在構造函數中初始化它。 – Tim

+0

當我這樣做時,它給了我這個錯誤'錯誤'StudentModule.Form2.timer2'和'StudentModule.Form2.timer2''之間的歧義 – Durga

+0

然後看起來你有'timer2'聲明兩次。在類中聲明它並在構造函數中實例化它。 – Tim

回答

2

if (sender == timer2) ... timer2不在該範圍存在 - 一個編譯時錯誤應該避免你的成功,除非你有在具有相同名稱更高級別定義的另一個例如,在這種情況下,它的而不是構造函數中的timer2 - 即不是發起事件的那個 - 您正在比較。

速戰速決是從timer2實例在構造函數中刪除類型前綴,像這樣:

timer2 = new Timer(); 
+0

是的你是對的,現在它的工作,謝謝你:) – Durga