在WinForm中声明一个全局整数

时间:2012-02-15 04:15:34

标签: c# winforms textbox int global

我正在尝试声明int

 private int i = 15 - textBox1.Text.Length;

作为此代码的全局整数

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBox1.Checked == true)
        {
            i = 15 - textBox1.Text.Length;
            timer1.Enabled = true;
            timer1.Start();
        }
        else
        {
            timer1.Enabled = false;
        }
    }
    private int i = 15 - textBox1.Text.Length; //this wont work but i need it to
    private int y = 15 - textBox1.Text.Length; //this wont work either but i also need it to
    private void timer1_Tick(object sender, EventArgs e)
    {

        if (i <= 11)
        {
            i++;
            string ping = new string(' ', i) + textBox1.Text;
            label1.Text = ping;
            if (i == 10)
            {
                y = 11;
            }
        }
        else if (y > 0)
        {
            y--;
            string pong = new string(' ', y) + textBox1.Text;
            label1.Text = pong;
            if (y == 0)
            {
                i = 0;
            }
        }
    }

但我收到了错误

字段初始值设定项不能引用非静态字段,方法或属性'text_test.Form1.textBox1'

帮助?

3 个答案:

答案 0 :(得分:3)

您正在尝试设置变量i初始值(顺便说一下,这是一个错误的变量名称 - 变量名称应该是描述性的!)。

您需要在工作流程的某个位置设置i的值 - 没有任何上下文,我猜可能会在OnTextChange事件或类似的事件中。

答案 1 :(得分:2)

private int i;

之后(在构造函数或其他东西中)做

i = textBox1.Text.Length;

答案 2 :(得分:1)

了解代码运行的顺序非常重要。您将字段声明放在代码中间,也许希望在运行checkBox1_CheckedChanged()方法之后将其初始化。但不,在类的构造函数运行之前,字段已初始化。

这永远不可能结束。 textBox1对象尚不存在,它由InitializeComponent()方法中的构造函数创建。它肯定没有长度,直到很多以后用户输入内容时才会发生。编译错误可以帮助您摆脱困境。

我不知道代码试图做什么。但是假设i变量需要用某些东西进行初始化,那么当用户在文本框中键入内容时就会这样做。这使Text.Length属性发生了变化。为文本框'TextChanged事件添加事件处理程序:

    private void textBox1_TextChanged(object sender, EventArgs e) {
        if (textBox1.Text.Length <= 15) {
            i = 15 - textBox1.Text.Length;
        }
    }