1

我想重用一段代码,所以我想我会用一个包含该代码的方法创建一个类,然后我会在需要的地方调用该方法。

我做了一个简单的例子来说明我的问题:

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            LoadText.getText();
        }
    }
}

加载文本.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1
{
    public class LoadText : Form1
    {
        public static void getText()
        {
            WindowsFormsApplication1.Form1.label1.Text = "New label1 text";
        }
    }
}

如您所见,我有一个带有标签的表单,我想使用我的其他方法(LoadText 中的 getText)来更改标签的文本。

这是我的错误信息:

非静态字段、方法或属性“WindowsFormsApplication1.Form1.label1”需要对象引用**

我已经在设计中将 label1从私有更改为公共。

我该如何解决这个问题?

4

4 回答 4

1

问题是这Form1是一个类,而不是一个对象。label1不是类的静态成员,它是实例的成员Form1。因此出现错误,它告诉您需要一个(Form1类的)对象实例。

尝试以下操作:

Form1.cs:

LoadText.getText(label1);

加载文本.cs:

public static void getText(Label lbl)
{
    lbl.Text = "New label1 text";
}

您现在有一个静态方法,它将接受一个Label对象并将其文本设置为“新 label1 文本”。

static有关修饰符的更多信息,请参见以下链接:

http://msdn.microsoft.com/en-us/library/98f28cdx.aspx

高温高压

于 2012-11-21T23:55:22.283 回答
1

这是 OO 编程新手的常见问题。

如果要使用对象的方法,则需要创建它的实例(使用 new)。除非,该方法不需要对象本身,在这种情况下,它可以(并且应该)被声明为静态的。

于 2012-11-21T23:56:41.147 回答
0

您需要对表单的引用才能访问其元素。

于 2012-11-21T23:55:06.650 回答
0

我尝试了另一种也有效的方法:

Form1.cs:

 // here a static method is created to assign text to the public Label
 public static void textReplaceWith(String s, Label label)
 {
     label.Text = s;
 }

加载文本.cs:

namespace WindowsFormsApplication1
{
    public class LoadText : Form1
    {
        //new label declared as a static var
        public static Label pLabel;

        //this method runs when your form opens
        public LoadTextForm() 
        {
            pLabel = Label1; //assign your private label to the static one
        }

        //Any time getText() is used, the label text updates no matter where it's used
        public static void getText()
        {
           Form1.textReplaceWith("New label1 text", pLabel); //Form1 method's used 
        }
    }
}

这将允许您使用公共方法从几乎任何地方更改标签的文本变量。希望这可以帮助 :)

于 2014-02-13T00:12:14.440 回答