2010-04-02 118 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(); 
} 
相关问题