我在Windows窗体源代码中创建了一个辅助函数(是正确的位置吗?),如何在同一表单源代码中引用其他地方创建的变量?
在下面的示例中,myFar在myForm中声明,myTextBox在设计器中绘制。两者都给出错误:" 非静态字段,方法或属性需要对象引用"。
我知道如果我将myVar定义为静态,代码就可以工作,但是如果我决定更改它的值呢?至于文本框,在设计器文件中将其更改为静态并不能纠正错误..
(我看了其他问题,但提出的解决方案似乎不适合我的代码)。
myForm.cs
namespace myThing
{
public partial class myForm : Form
{
public int myVar;
public myForm()
{
InitializeComponent();
myVar = 0;
}
static void foo(Point checkPoint, List<Vertex> checkList)
{
int myNumber = myForm.myVar;
myForm.myTextBox.Text = "";
//OR
System.Windows.Forms.TextBox.myTextBox.Text = "";
}
my.Form.Designer.cs
namespace myThing
{
partial class myForm
{
//a bunch of stuff goes here
private System.Windows.Forms.PictureBox myPictureBox;
private System.Windows.Forms.TextBox myTextBox;
}
}
答案 0 :(得分:1)
如果没有传入定义变量的类的实例,则无法在静态方法中引用实例变量。
将变量声明设置为静态(可能不是您想要的)或使foo()函数非静态,或者将变量存在的表单实例传递给foo()方法。
您似乎在犯一个概念错误 - 一个Form不是一个视觉结构 - 它只是一个类声明。您可以根据需要随时在内存中存在同一个Form的实例。它的行为与其他类声明完全相同。如果你是来自MS Access或类似的,这可能看起来很奇怪。
例如,静态Foo()中的myForm变量没有值 - 它不表示myForm类的任何特定实例,因此不会编译,除非它专门用于引用类的静态属性。
答案 1 :(得分:0)
这个问题的解决方案似乎是将foo方法设置为public。