2011-10-10 66 views
0

我有上點擊我想一個按鈕被禁用,這是改變這裏空是代碼我有發生在鼠標點擊的背景圖像禁用和C#中的更改按鈕圖像上單擊

private void levelOne1001_Click(object sender, EventArgs e) 
    { 
     levelOne1001.Enabled = false; 
     levelOne1001.BackgroundImage = null; 
     scoreClass.genRandomNumber(100); 
     scoreClass.valOfQuestion = 100; 
     q1001 = true; 
     openQuestionForm(); 
    } 

這裏是從openQuestionForm();

private void openQuestionForm() 
    { 
     QuestionForm qForm = new QuestionForm(); 
     scoreClass.iCount++; 
     qForm.Show(); 
     this.Hide(); 
    } 

的代碼,這裏就是我所說的這種形式備份

 Level1Form l1Form = new Level1Form(); 
    l1Form.Show(); 

過程如何工作是原始形式上的按鈕被點擊進入問題表單,點擊問題表單上的按鈕它將返回原始表單。但是當我回到原始形式時,按鈕仍然處於啓用狀態,圖像仍然存在。有沒有什麼辦法解決這一問題?

編輯:忘了說,這是的WinForms

+0

Metro?的WinForms? WPF? Silverlight的? ASP.Net? MonoTouch的? – SLaks

+0

WinForms對不起,我忘了指定。 – Cistoran

+0

您需要了解基本的OOP概念 - 類和實例。 – SLaks

回答

1

您正在實例化一個新的Level1Form,因此它將返回到其默認狀態,導致按鈕返回到其默認狀態。有幾種可能的方法:

添加參數Level1Form的構造函數表示什麼狀態下的按鈕應該是,像

Level1Form(bool enableButton) { 
    initComponent(); 

    if(!enableButton) { 
     levelOne1001.Enabled = false; 
     levelOne1001.BackgroundImage = null;    
    } 
    } 

或者,再次獲取相同的形式和重用。你需要在某處保留一個引用,並告訴它再次顯示。或者,你可以抓住它Application.OpenForms

+0

這是我掌握和編寫的最簡單的方法,謝謝! – Cistoran

+0

請注意,通過每次創建新表單,您都浪費了大量內存。我覺得這對於這個應用來說並不是什麼大不了的事情,因爲你似乎只是在學習。在路上你會回頭看看,看到更好的方式,但現在這種方法沒有問題。 –

+0

非常誠實,應用程序並不像內存密集。它只有幾百行代碼,並不僅僅是一個簡單的學習遊戲。 – Cistoran

0

你正在創建一個新的Level1Form實例,該實例無關所修改現有的實例。

您需要重新顯示原始實例。

+0

我從來沒有被教過如何做到這一點,當我在'Level1Form1.'下查找要調用的選項時,我找不到Show函數。 – Cistoran

+0

您需要將現有實例('this')傳遞給'QuestionForm'(在構造函數中),然後將其存儲在'private'字段中,以便稍後重新顯示它。 – SLaks

0

你需要記住你的初始表單實例在一個成員之外的方法和調用顯示它。

Level1Form l1Form; 

private void FirstTimeCreate() 
{ 
    l1Form = new Level1Form(); 
} 

private void Reshow() 
{ 
    l1Form.Show(); 
}