c字符串迭代器,用于逐个显示单词



我想做的是一个包含文本框(或其他允许我这样做的东西(的程序,这个文本框将显示我的resource.txt文件中的文本,这将像一个单词接一个单词或两个单词接另一个单词一样,供用户改进文本上的眼动。为了更清楚,文本框将逐个显示单词。我可以通过使用字符串数组来实现,但它只适用于Listbox,而Listbox不适合这个项目,因为它是垂直的,我需要水平文本,就像我们在书中看到的那样。

这是一个代码,它显示了ı想要什么,但ı不能使用它的逻辑,当我点击按钮时,它就会停止。

{
public Form1()
{
InitializeComponent();
}
string[] kelimeler;


private void button1_Click(object sender, EventArgs e)
{
const char Separator = ' ';
kelimeler = Resource1.TextFile1.Split(Separator);
}

private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i< kelimeler.Length; i++)
{
textBox1.Text += kelimeler[i]+" " ;
Thread.Sleep(200);

}


}
}

以下是如何使用asyncawait。它使用async void,这通常是不受欢迎的,但这是我知道如何使按钮处理程序异步的唯一方法。

我不会从资源中找出起始字符串,我只是这样做:

private const string Saying = @"Now is the time for all good men to come to the aid of the party";

并且,我雕刻了字符串的检索和分割——它自己的函数(使用yield return来制造枚举器(。

private IEnumerable<string> GetWords()
{
var words = Saying.Split(' ');
foreach (var word in words)
{
yield return word;
}
}

然后剩下的就是将单词粘贴到文本框中的代码。这段代码可以做我认为你想做的事情(把第一个单词放在文本框中,稍微停顿一下,放下一个,停顿一下,等等(

private async void button3_Click(object sender, EventArgs e)
{
textBox4.Text = string.Empty;
foreach (var word in GetWords())
{
textBox4.Text += (word + ' ');
await Task.Delay(200);
}
}

最新更新