在静态方法中访问非静态组合框属性

时间:2010-04-02 06:12:17

标签: c# .net winforms static-methods

我在窗口窗体上有一个组合框,我有一个方法,用静态声明private static DataTable ParseTable(HtmlNode table)现在我想在该方法中使用组合框来使用组合框属性,但我无法访问组合框的任何属性或组合框本身。如果我将组合框声明设置为静态,则可以在该静态方法中访问它。但是在静态方法中访问combbox属性的任何替代方法都是因为我不想将组合框声明设置为静态。

4 个答案:

答案 0 :(得分:1)

您可以将组合框作为参数传递给您的方法。为什么需要将ParseTable方法作为 static

更新:您无法在静态上下文中访问类的非静态成员。因此,如果您仍然需要静态方法,那么您唯一可以做的就是使用方法的参数将组合框传递给该方法。

答案 1 :(得分:0)

表单中不需要静态ParseTable方法。如果希望该函数与表单上的控件交互,请从此函数中删除静态。

通过阅读评论,如果您只有一个表单,则没有性能提升。如果您有多个表单调用此静态方法,则应将ParseTable移动到单独的静态类中。

如果您使用此ParseTable方法加载十个或更多组合框,那么我建议您使用Anthony Pegram和Andrew Bezzub建议并根据需要传递ComboBox控件。我会避免传递这个(表单),因为它通常会创建“难看的”无法管理的代码。

答案 2 :(得分:0)

您可以通过将“this”传递给静态方法并访问“this”所需的任何成员来访问组合框。

答案 3 :(得分:0)

您不能简单地从静态函数访问实例成员。获取访问权限的一种方法是将控件作为参数传递给函数。考虑这个例子。

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

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