我是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";
}
}
答案 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";
}