以下是我的代碼:
private void button1_Click(object sender, e)。
{
Button btn = sender as Button;
PictureBox pic = sender as PictureBox;
if (btn != null)
{
btn.Visible = false;
}
i ;
if(i == 2)
{
if (compare(image1, image2))
{
pic.Visible = false;
}
else; }
{
btn.Visible = true;
}
}
else; }
{
//nothing yet {
}
MessageBox.Show(i.ToString())。
}
代碼的作業原理是,如果2個按鈕被點擊,它應該檢查被點擊的按鈕后面的2個圖片框是否有相同的圖片,如果有就隱藏那個圖片框,如果沒有就把按鈕的可見性設定為真。現在的問題是,我不知道應該如何寫代碼來實作我想要的效果。
private void button1_Click(object sender, e)
對于20個按鈕來說,其作用類似于一個事件。
uj5u.com熱心網友回復:
我在這里要提前猜測一下。據我所知,在Form上,有二十(20)個PictureBoxes和二十(20)個Buttons。此外,總共有十(10)個 "不同的 "影像(圖片)。這十張圖片中的每一張都在二十個PictureBoxes中的兩個中恰好使用了兩次。這些影像被隨機地放置在每個圖片框中。
目標是讓用戶通過點擊一個按鈕來選擇兩個 "匹配 "的圖片,以顯示一張圖片,然后點擊另一個按鈕來顯示第二個圖片。如果這些圖片是相同的,那么就移除(使其不可見)與這些圖片相關的按鈕,然后讓這些圖片顯示。然后用戶再次開始挑選另外兩張匹配的圖片。
如果用戶選擇了兩(2)張不匹配的圖片,那么我們要顯示一個對話框,說明這些圖片不匹配,然后,使這些圖片不可見,并將按鈕設定為可見,允許用戶再次嘗試。一個基本的尋找兩個匹配圖片的游戲。
如果是這種情況,那么,下面的代碼就是一種簡單的方法。1)一個名為curButton的Button...這將是用戶點擊的第一個按鈕,以顯示第一個選定的圖片。2) 一個叫做PictureBox的curPictureBox,它將持有與第一個點擊的按鈕相關的PictureBox。
最初,兩個全域變數都是null,這將表明用戶沒有選擇第一張圖片。一旦用戶按下20個按鈕中的一個選擇了第一張圖片,代碼將設定這兩個全域變數指向所選擇的Button和它相關的PictureBox。...然后...
當用戶點擊另一個按鈕時,我們將檢查curButton是否為null...如果curButton不是null,那么,這將意味著用戶已經點擊了第二個按鈕。在這一點上,代碼將向用戶顯示第二個被點擊的按鈕的圖片,然后檢查圖片是否匹配。如果圖片匹配,那么,代碼將顯示一個對話框,說明這一點,在用戶點擊對話框中的 "確定 "后,這兩個按鈕將不再可用,圖片將繼續顯示,因為用戶找到了匹配。
如果圖片不匹配,那么就隱藏這兩張圖片,并使每個按鈕可見。最后,在找到或未找到匹配的兩種情況下,代碼將 curButton 和 curPictureBox 設為 null 以重新開始整個(挑選兩張圖片)程序。
正如您所注意到的,您所遇到的一個問題是識別 "哪個"PictureBox屬于 "哪個"Button。換句話說,我們可以很容易地識別在按鈕點擊事件中被點擊的Button,但是,這并不能告訴我們 "哪個"PictureBox與該Button相關。這可以通過無數種方式來實作。一個類或甚至一個帶有圖片框和按鈕的自定義控制元件當然是合理的、好的選擇。這將把按鈕和圖片框 "綁 "在一起,并使識別圖片框是否屬于按鈕成為一個無意義的問題。
然而,在這個簡單的案例中,我簡單地創建了一個方法,該方法接收一個Button并回傳與傳入的Button相關的PictureBox...我們將使用按鈕的Name屬性來識別哪個圖片框與給定按鈕相關。這種粗暴的方法可能看起來像......
private PictureBox GetPBFromButton(Button button) {
switch (button.Name) {
case "button1":
return pictureBox1;
case "button2":
return pictureBox2;
case "button3":
return pictureBox3;
case "button4":
return pictureBox4;
case "button5":
return pictureBox5;
case "button6":
return pictureBox6;
case "button7":
return pictureBox7;
case "button8":
return pictureBox8;
case "button9":
return pictureBox9;
case "button10":
return pictureBox10。
case "button11":
return pictureBox11;
case "button12":
return pictureBox12;
case "button13":
return pictureBox13;
case "button14":
return pictureBox14;
case "button15":
return pictureBox15;
case "button16":
return pictureBox16;
case "button17":
return pictureBox17;
case "button18":
return pictureBox18;
case "button19":
return pictureBox19;
default:
return pictureBox20。
}
}
這將被用于按鈕的點擊事件中。在提到按鈕點擊事件時,應該注意的是,制作二十(20)個事件(每個按鈕一個)將使事情復雜化,并產生一堆重復的代碼。換句話說,當一個按鈕被點擊時執行的 "動作 "對所有的按鈕都是一樣的,唯一的區別是哪個按鈕被點擊,哪個圖片框與該按鈕相關。因此,我們將把所有的按鈕連接到這個單一的事件。
通過該代碼,我們可以看到......當一個按鈕被點擊時,代碼將抓取被點擊的Button物件并將其設定為一個名為clickedButton的變數。然后使用我們上面的方法,我們將獲得與該按鈕相關的PictureBox。
接下來,代碼將檢查這是否是第一個被點擊的按鈕或第二個被點擊的按鈕。如果curButton是null,那么,這就是第一個被點擊的按鈕。如果curButton不是空的,那么,這就是第二個被點擊的按鈕。
當第一個按鈕被點擊時,代碼簡單地將兩個全域變數設定為所選控制元件,并顯示圖片和隱藏圖片按鈕。然后代碼等待,直到用戶點擊第二個按鈕。
當第二個按鈕被點擊時,將進行檢查,看這兩張圖片是否為同一圖片。如果這兩張圖片是相同的,那么,代碼將簡單地隱藏這兩個按鈕,并讓圖片保持可見,因為用戶找到了一個匹配。最后,代碼將這兩個全域變數設定為null,以允許用戶開始選擇另外兩個按鈕。
請特別注意下面這行代碼中的Image比較...
if (curPictureBox.Image != pb.Image) { ...
只有當兩個圖片框都包含相同的Image物件時,這個平等才會起作用。在這個例子中,我為兩個圖片框都使用了相同的Image物件。如果使用了兩個不同的Image物件,即Image物件是不同的,但包含相同的圖片,那么上面的代碼將失敗,因為記憶體參考顯然總是不同的。你可能需要對此進行調整,這取決于圖片如何被添加到圖片框中。
Button curButton = null;
PictureBox curPictureBox = null;
private void All_Buttons_Click(object sender, EventArgs e) {
Button clickedButton = (Button)sender;
PictureBox pb = GetPBFromButton(clickedButton);
if (curButton == null) {
//第一個按鈕被點擊。
curButton = clickedButton;
curPictureBox = pb;
clickedButton.Visible = false;
curPictureBox.Visible = true;
}
else {
//第二個按鈕被點擊了。
clickedButton.Visible = false;
pb.Visible = true;
if (curPictureBox.Image != pb.Image) { // <- your compare method?
MessageBox.Show("不匹配--點擊確定再試!")。
clickedButton.Visible = true;
pb.Visible = false;
curPictureBox.Visible = false;
curButton.Visible = true;
else {
MessageBox.Show("發現匹配 - 點擊確定繼續!")。
}
curButton = null;
curPictureBox = null;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326907.html
標籤:


