c#.Net在文本框中每次打印字符串的一个字符
本文关键字:字符 一个 字符串 打印 文本 Net | 更新日期: 2023-09-27 18:13:58
我是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";
}
}
为什么这个不增加当它再次滴答?
因为变量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线程上得到更新。
你的代码的问题是,你是分配i = 0
与每个tick,所以它将永远是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";
}