C#.Net在TextBox中一次打印一个字符串的一个字符

时间:2014-07-21 13:36:47

标签: c#

我是C#的新手,我需要你的帮助,我想在文本框中一次显示一个字符这是我的代码

private void timer1_Tick(object sender, EventArgs e)
{
    int i = 0;  //why does this don't increment when it ticks again?
    string str = "Herman Lukindo";
    textBox1.Text += str[i];
    i++; 
}

private void button1_Click(object sender, EventArgs e)
{
    if(timer1.Enabled == false )
    {
        timer1.Enabled = true;
        button1.Text = "Stop";
    }
    else if(timer1 .Enabled == true )
    {
        timer1.Enabled = false;
        button1.Text = "Start";
    }
}

2 个答案:

答案 0 :(得分:4)

  

为什么当它再次嘀嗒时不会增加?

因为您的变量i是您的活动的本地变量。您需要在类级别定义它。

int i = 0;  //at class level
private void timer1_Tick(object sender, EventArgs e)
{
    string str = "Herman Lukindo";
    textBox1.Text += str[i];
    i++; 
}

退出事件后,变量i超出范围并失去其值。在下一个事件中,它被视为一个新的局部变量,其初始值为0

接下来,您还应该查找交叉线程异常。由于您的TextBox未在UI线程上获得更新。

答案 1 :(得分:0)

您的代码问题在于您为每个刻度分配i = 0,因此每次使用时它始终为0。我建议使用类级变量。

但是,在类级别使用变量意味着您需要在某个时刻重置为0,可能每次都启动计时器。

另一点是,您将要验证tick事件,以确保您不会尝试访问不存在的索引(IndexOutOfRangeException)。为此,我建议在打印完最后一个字母后自动停止计时器。

考虑到所有这些,这是我建议的代码:

int i = 0;// Create i at class level to ensure the value is maintain between tick events.
private void timer1_Tick(object sender, EventArgs e)
{
    string str = "Herman Lukindo";
    // Check to see if we have reached the end of the string. If so, then stop the timer.
    if(i >= str.Length)
    {
        StopTimer();
    }
    else
    {
        textBox1.Text += str[i];
        i++; 
    }
}

private void button1_Click(object sender, EventArgs e)
{
    // If timer is running then stop it.
    if(timer1.Enabled)
    {
        StopTimer();
    }
    // Otherwise (timer not running) start it.
    else
    {
        StartTimer();
    }
}

void StartTimer()
{
    i = 0;// Reset counter to 0 ready for next time.
    textBox1.Text = "";// Reset the text box ready for next time.
    timer1.Enabled = true;
    button1.Text = "Stop";
}

void StopTimer()
{
    timer1.Enabled = false;
    button1.Text = "Start";
}