2011-10-10 69 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(); 
}