我想重用一段代码,所以我想我会用一个包含该代码的方法创建一个类,然后我只需要在任何需要它的地方调用该方法。
我举了一个简单的例子说明了我的问题:
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();
}
}
}
LoadText.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 从私人更改为公开。
如何解决此问题?
答案 0 :(得分:1)
问题是Form1
是一个类,而不是一个对象。 label1
不是类的静态成员,它是Form1
的实例的成员。因此该错误告诉您(Form1
类的)对象实例是必需的。
尝试以下方法:
<强> Form1.cs中:强>
LoadText.getText(label1);
<强> LoadText.cs:强>
public static void getText(Label lbl)
{
lbl.Text = "New label1 text";
}
您现在有一个静态方法接受Label
对象并将其文本设置为“new label1 text”。
有关static
修饰符的详细信息,请参阅以下链接:
http://msdn.microsoft.com/en-us/library/98f28cdx.aspx
HTH
答案 1 :(得分:1)
对于OO编程的新手来说,这是一个常见的问题。
如果要使用对象的方法,则需要创建它的实例(使用new)。除非,该方法不需要对象本身,在这种情况下,它可以(并且应该)声明为静态。
答案 2 :(得分:0)
您需要引用表单才能访问其元素。
答案 3 :(得分: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;
}
<强> LoadText.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
}
}
}
这将允许您使用公共方法从几乎任何地方更改标签的文本变量。希望这会有所帮助:)