2011-05-16 20 views
0

您好我有這個代碼行,我不能讓它工作 的目標很簡單設置Form1以可見=假C#設置form.visible = false方法內?

public static void DoActions(string Cmd){ 

if(Cmd == true) 
{ 

MainForm.Visible = false; 
} 
} 

,但我一直有這個錯誤

的對象引用需要 非靜態字段,方法或 屬性

通常我被叫methond設置爲靜態..所以錯誤將消失 但在這種情況下,我該怎麼做?

感謝您的幫助球員

'System.Windows.Forms.Control.Invoke(System.Delegate)'

回答

1

這是發生,因爲DoActions是一個靜態方法而不是一個實例方法,但是MainForm是一個實例字段/屬性。區別在於實例方法在定義它們的類的實例上運行,而靜態方法則不然。

這意味着wheras實例方法都能夠通過this關鍵字來訪問屬性,字段和它們包含類的方法,例如:

// Instance field 
Form1 MainForm; 

void InstanceMethod() 
{ 
    Form1 frm = this.MainForm; 
} 

你不能從一個靜態方法裏面做同樣的事情(想一想,它會運行什麼樣的實例?)。請注意,C#將默認假設在有意義的地方使用this關鍵字(因此上述示例可能已被編寫爲Form1 frm = MainForm)。

請參閱C# Static Methods瞭解靜態與實例方法的替代解釋(這是面向對象編程中的一個重要概念,您應該花時間理解)。

在你的榜樣,你可能要換DoActions實例方法(通過去除靜態聲明):

public void DoActions(string Cmd) 
{ 
    if(Cmd == true) 
    { 
     this.MainForm.Visible = false; 
    } 
} 

這將允許它訪問實例MainForm字段/屬性,不過,這可能在您嘗試從另一個靜態方法調用DoActions而不提供對象實例的地方,導致代碼中的其他地方出現問題。

+0

嗨Kragen,感謝您的解釋。它現在讓我明白爲什麼即時通訊有這個問題..你建議我將我的方法改爲非靜態方法嗎? – Katherina 2011-05-16 01:42:40

+0

@Katherina您可以將'MainForm'改爲靜態或'DoActions',使其不是靜態的(或者在訪問'MainForm'時提供一個實例,例如'someForm.MainForm')。您需要做的事情取決於您的應用程序 - 在不瞭解更多上下文的情況下,很難在此示例中告訴您。 – Justin 2011-05-16 01:49:18

+0

嗨Kragen,感謝您的幫助,我可以說現在我很高興我解決了我的問題。謝謝! – Katherina 2011-05-16 02:21:16

0

你的方法是靜態的 - 所以不能訪問的MainForm。 如果不需要,方法是非靜態的。

public void DoActions(string Cmd) 

{ 如果(Cmd的== TRUE){ MainForm.Visible = FALSE; }}

如果是需要,然後在您的類中創建一個靜態字段,並確保這種方法運行之前,它被設置。

0

設置形式的不透明性和ShowInTaskBar屬性在屬性窗口中:

 this.Opacity = 0; 
     this.ShowInTaskbar = false; 
相關問題