Объявите глобальное целое число в WinForm - PullRequest
1 голос
/ 15 февраля 2012

Я пытаюсь объявить 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 ]

3 голосов
/ 15 февраля 2012

Вы пытаетесь установить начальное значение переменной i (кстати, это неверное имя переменной - имена переменных должны быть описательными!).

Вам нужно будет установить значение i в какой-то момент в вашем рабочем процессе - без какого-либо контекста, я думаю, вероятно, в событии OnTextChange или чем-то подобном.

2 голосов
/ 15 февраля 2012
private int i;

затем после этого (в функции конструктора или чего-то еще) выполните

i = textBox1.Text.Length;
1 голос
/ 15 февраля 2012

Важно понимать порядок выполнения кода.Вы помещаете объявление поля в середине вашего кода, возможно, надеясь, что оно будет инициализировано после запуска метода checkBox1_CheckedChanged ().Но нет, поля инициализируются до того, как запустится конструктор класса.

Это никогда не могло бы закончиться хорошо.Объект textBox1 еще не существует, он создается конструктором в методе InitializeComponent ().У него наверняка еще не будет длины, которая не произойдет до тех пор, пока много позже, когда пользователь что-то введет.Ошибка компилятора избавляет вас от неприятностей.

Я понятия не имею, что пытается сделать код.Но предполагая, что переменная i должна быть инициализирована чем-то, вы делаете это, когда пользователь вводит что-то в текстовое поле.Что приводит к изменению свойства Text.Length.Добавьте обработчик события для текстового поля 'TextChanged event:

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