天天看點

C#中pictureBox重繪、Timer控件、選擇檔案夾、響應鍵盤

花了點時間用C#寫了一個連連看,主要是想熟悉下基本文法和常用類庫。現在從工程裡面截點代碼做記錄,高手請飄過。

在pictureBox的重繪問題上花了不少時間,開始我在OnPaint中的寫的繪圖函數,但圖像總是一閃而過,好像圖像是被後面的繪圖給又覆寫了,後來就換了下面這種方法。

//PictureBox和Bitmap綁定,Graphics再和Bitmap綁定

PictureBox pictureBoxGrid;

Bitmap bGrid = new Bitmap(pictureBoxGrid.Width, pictureBoxGrid.Height);

Graphics gGrid = Graphics.FromImage(bGrid);

pictureBoxGrid.Image = bGrid;

//在這裡用gGrid繪圖

//

pictureBoxGrid.Refresh();

Timer。

我當時要實作的效果是每隔一段時間更新pictureBox一次。

一開始用的System.Timers.Timer,但是在調用pictureBox的refresh函數時有問題,提示不能在外部線程調用控件。

後來我換成System.Windows.Forms.Timer,問題就解決了。

System.Windows.Forms.Timer timerGame;

timerGame.Tick += new EventHandler(UpdateTimer);

timerGame.Enabled = false;//控制是否出發Tick事件

timerGame.Interval = 1000;

private void UpdateTimer(object Sender, EventArgs e)

{

//do something

}

選擇檔案夾通用對話框

FolderBrowserDialog tmpDialog = new FolderBrowserDialog();

tmpDialog.Description = "請選擇圖檔檔案夾(包含按0至14編号的15個bmp格式圖檔檔案)";

tmpDialog.ShowNewFolderButton = false;

tmpDialog.RootFolder = Environment.SpecialFolder.MyComputer;

tmpDialog.SelectedPath = Environment.CurrentDirectory + "//1";

if (tmpDialog.ShowDialog() == DialogResult.OK)

{

display.LoadPic(tmpDialog.SelectedPath);

}

響應鍵盤事件

private void MainForm_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.Space)

{

if (gameState == GameState.Doing) 暫停ToolStripMenuItem_Click(null, null);

else if (gameState == GameState.Pause) 繼續ToolStripMenuItem_Click(null, null);

else 開始ToolStripMenuItem_Click(null, null);

}

}