获取标签以缓慢插入文本

时间:2017-09-10 18:09:58

标签: c# winforms

我正在尝试将文字插入标签,但文字必须慢慢插入/逐个字符/字母, 有点像旧的MUD游戏。

到目前为止,我尝试过这样做:

private void StoryBox_Click(object sender, EventArgs e)
{
    string text = StoryBox.Text;
    var index = 0;
    var timer = new System.Timers.Timer(2000);

    timer.Elapsed += delegate
    {
        if (index < text.Length)
        {
            index++;
            StoryBox.Text = "This should come out pretty slowly ";
        }
        else
        {
             timer.Enabled = false;
             timer.Dispose();
        }
    };

    timer.Enabled = true;
}

这是我从网站收集的内容,但我并不特别理解为什么这不起作用。

正如您在StoryBox_Click下看到的那样 有没有办法实现自动化?因此,当程序打开时,它会计算几秒钟,然后开始写出文本。

2 个答案:

答案 0 :(得分:0)

试试这个:

private async void button1_Click(object sender, EventArgs e)
{
    string yourText = "This should come out pretty slowly";
    label1.Text = string.Empty;
    int i = 0;
    for (i = 0; i <= yourText.Length - 1; i++)
    {
        label1.Text += yourText[i];
        await Task.Delay(500);
    }
}

答案 1 :(得分:0)

您可以在打开GUI后启动Shown - YourForm事件。

重复使用您提供的代码并更改一些可能对您有用的内容:

将私有字段添加到YourForm类:

private Timer _timer;
private int _index;
private string _storyText;

并在YourForm构造函数

中初始化它
public YourForm()
{
    InitializeComponent();

    // init private fields;
    this._index = 0;
    this._storyText = "This should come out pretty slowly";

    // Timer Interval is set to 1 second
    this._timer = new Timer { Interval = 1000 };

    // Adding EventHandler to Shown Event
    this.Shown += this.YourForm_Shown;

    this._timer.Tick += delegate
    {
        if (this._index < this._storyText.Length)
        {
            StoryBox.Text += this._storyText[this._index];
            this._index++;
        }
        else
        {
            this._timer.Stop();
        }
    };
}

以及Shown的{​​{1}}事件:

YourForm