2010-04-02 178 views
1

我在窗體窗體上有一個組合框,並且我有一個方法與靜態一樣聲明爲private static DataTable ParseTable(HtmlNode table)現在我想在該方法中使用組合框來使用組合框屬性,但是我不能訪問組合框或組合框本身的任何屬性。如果我將組合框聲明設置爲靜態,那麼可以在該靜態方法中訪問它。但是,在該靜態方法中訪問combbox屬性的任何其他方法,因爲我不想將組合框聲明作爲靜態的。在靜態方法中訪問非靜態combbox屬性

回答

1

您可以將combobox作爲參數傳遞給您的方法。爲什麼你需要有ParseTable方法靜態

更新:您不能在靜態上下文中訪問非靜態類的成員。所以如果你仍然需要一個靜態方法,你可以做的唯一的事情就是使用方法的參數將你的組合框傳遞給那個方法。

+0

@Andrew Bezzub,這個方法經常被調用,我想使應用程序的性能更好,所以我已經聲明方法是靜態的。 – Harikrishna 2010-04-02 06:34:17

+1

@Harikrishna,我認爲這不是性能優化的正確場所。 – 2010-04-02 06:38:19

+0

@Andrew Bezzub,可能有將近十個組合框,甚至沒有固定數量的可以在窗體上的組合框。 – Harikrishna 2010-04-02 06:43:26

0

表單中沒有必要使用靜態ParseTable方法。如果您希望該功能與表單上的控件進行交互,請從該函數中移除靜態。

從閱讀評論,如果您只有一種形式,沒有性能改進。如果你有多個表單調用這個靜態方法,那麼ParseTable應該被移動到一個單獨的靜態類中。

如果您使用此ParseTable方法加載10個或更多組合框,那麼我建議您使用Anthony Pegram和Andrew Bezzub建議,並根據需要傳遞ComboBox控件。我會避免傳遞這個(表單),因爲它通常會產生「醜陋」的難以管理的代碼。

0

您可以通過將「this」傳遞給靜態方法並訪問通過「this」需要的任何成員來訪問組合框。

+0

@Adrian Faciu,請簡要解釋.. – Harikrishna 2010-04-02 06:33:07

+0

@Harikrishna,看看我的答案。除了不像我的例子那樣接收一個TextBox,你會收到一個表單類型的對象(Form1?)。然後可以使用「this」作爲參數來調用該函數。函數本身可以訪問參數的可訪問成員。 – 2010-04-02 06:43:31

+0

@Harikrishna,安東尼是正確的,它會是相同的,但不是一個TextBox參數,你會有一個表單。如果您只需要textBox中的數據,您應該使用該數據,使用「this」您可以訪問表單的所有成員。 – 2010-04-02 07:12:58

0

您將不能簡單地從靜態函數訪問實例成員。獲得訪問權限的一種方法是可以將控件作爲參數傳遞給函數。考慮這個例子。

private void button1_Click(object sender, EventArgs e) 
{ 
    Form1.DoSomething(textBox1); 
} 

public static void DoSomething(TextBox textbox) 
{ 
    textbox.Text = DateTime.Now.ToString(); 
} 
相關問題