2012-04-13 60 views
1

在我的主要形式,我运行此:方法不工作

this.disableForm(); 
btnAbort.Enabled = true; 

disableForm是在我的节目形态定义为以下的扩展方法:

public static void disableForm(this Form f) 
{ 
    foreach (Control c in f.Controls) 
    { 
     f.Enabled = false; 
    } 

    f.Cursor = Cursors.WaitCursor; 
} 

的问题是,下一个命令btnAbort.Enabled = true;不会做任何事情。

它的工作原理是如果我把代码直接放在方法中而不是调用disableForm()。这是为什么发生?它与线程有关吗?

+0

你不能从一个非UI线程修改UI元素,如果这就是你在问什么 – 2012-04-13 08:56:11

+0

凡在我的问题我提到这不是一个UI线程? – TheGateKeeper 2012-04-13 08:58:30

+0

然后,您应该更彻底地了解“这与线程有关”。 – 2012-04-13 08:59:07

回答

7

这条线:

f.Enabled = false; 

应该

c.Enabled = false; 

的问题是因为你不小心禁用你的整个形式。

+0

哦,伙计,我怎么错过了! – TheGateKeeper 2012-04-13 09:02:28

+0

S l v n a l t c c。 – 2012-04-13 09:02:57

+0

@MartinJames ??? – 2012-04-13 09:03:51

2
public static void disableForm(this Form f) 
    { 
     foreach (Control c in f.Controls) 
     { 
      //f.Enabled = false; 
       c.Enabled = false; 
     } 

     f.Cursor = Cursors.WaitCursor; 
    } 
+0

为什么这个答案被拒绝投票... – Sadaf 2012-04-13 09:22:54