C#引用同一Windows窗体中函数之间的变量

时间:2016-04-02 10:04:04

标签: c# static

我在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;
    }
}

2 个答案:

答案 0 :(得分:1)

如果没有传入定义变量的类的实例,则无法在静态方法中引用实例变量。

将变量声明设置为静态(可能不是您想要的)或使foo()函数非静态,或者将变量存在的表单实例传递给foo()方法。

您似乎在犯一个概念错误 - 一个Form不是一个视觉结构 - 它只是一个类声明。您可以根据需要随时在内存中存在同一个Form的实例。它的行为与其他类声明完全相同。如果你是来自MS Access或类似的,这可能看起来很奇怪。

例如,静态Foo()中的myForm变量没有值 - 它不表示myForm类的任何特定实例,因此不会编译,除非它专门用于引用类的静态属性。

答案 1 :(得分:0)

这个问题的解决方案似乎是将foo方法设置为public。