【问题标题】:Declare a global integer in WinForm在 WinForm 中声明一个全局整数
【发布时间】:2012-03-06 11:10:13
【问题描述】:

我正在尝试声明 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”

帮助?

【问题讨论】:

  • 据我所知,您在表单上有 TextBoxCheckBoxLabel,当您选中复选框时,您希望 Timer 动画标签的文本。到目前为止我是对的吗?当用户在选中复选框时编辑文本框中的值时,您希望发生什么?

标签: c# winforms textbox int global


【解决方案1】:

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

这永远不会有好的结局。 textBox1 对象还不存在,它由构造函数在 InitializeComponent() 方法中创建。它肯定还没有 Length,直到 很多 之后用户键入内容时才会发生。编译器错误让您远离麻烦。

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

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

【讨论】:

  • 这样做会使 i 的值保持不变,即使我在计时器中使用它?这就是我所需要的,我需要 i = 15 - textbox1.text.length 是全局的有没有办法做到这一点?如果我将 int i = 15 - textbox1.text.length 放入计时器中,我必须能够在计时器中使用它,它会弄乱它,因为每次它打勾时,它只会将值设置回那个
【解决方案2】:

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

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

【讨论】:

  • 问题是我必须先获得文本长度,然后才能做我想做的事情,因为我需要在计时器中使用它,如果我在 timer_tick 中声明它,它就会搞砸
  • @IanLundberg 我建议发布一个包含更完整代码的新问题。可能有更合适的方法来完成您想要的,但我认为没有人能够在不查看更多代码的情况下为您指出正确的方向。
【解决方案3】:
private int i;

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

i = textBox1.Text.Length;

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多