2012-02-15 81 views
1

我想申报INT声明全局整数在winform

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'

有帮助吗?

+0

从我可以告诉你有一个'TextBox',一个'CheckBox'和'Label'窗体上,当你选中复选框,你需要一个'Timer'来为标签的文本设置动画。我到目前为止是否正确?当用户在复选框被选中时编辑文本框中的值时,您希望发生什么? – 2012-02-16 00:30:31

回答

3

你试图设置变量i初始值(这是坏的变量名,由方式 - 变量名称应该是描述性的!)。

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

+0

问题是我必须得到文本的长度,然后才能做我想做的事情,因为我需要在计时器中使用它,如果我在timer_tick中声明它将其拧紧 – 2012-02-15 04:24:03

+0

@IanLundberg我建议发布一个新的然后问题与更完整的代码。可能有更合适的方法来完成你想要的任务,但我不认为任何人都能够在没有看到更多代码的情况下指向正确的方向。 – 2012-02-15 04:25:34

+0

好的,我会这么做 – 2012-02-15 04:35:21

2
private int i; 

那之后(在构造函数或东西)做

i = textBox1.Text.Length; 
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; 
     } 
    } 
+0

将这样做,使我保持相同的价值即使我用它在一个计时器?这就是我需要的所有我需要我= 15 - textbox1.text.length是全球有没有办法做到这一点?我必须能够在定时器中使用它,如果我把int i = 15 - textbox1.text.length放到定时器中,它会把它弄糟,因为每次它打勾时它只是将值设置回那个值 – 2012-02-15 05:31:00