C#如何在sendkeys的循环中读取第1行,然后是第二行,然后是第三行?

时间:2017-10-15 14:57:06

标签: c#

我想创建一个程序,将多行文本框中的密钥发送到外部程序。 在文本框中是多行文本,但我需要第一行, 并将它发送到外部程序。

这个想法是,在一个循环中完成它,当它到达最后一行时停止。

我已经制作了一些代码,但它并不像我需要的那样工作,我不是这种编程语言中最好的。

多行文字框中的文字:

Hello im here 
Here to create 
Create for honor 
honor for all 
all for hello 
Hello im here 
Here to create 
Create for honor 
honor for all 
all for hello

代码:

    private void button1_Click(object sender, EventArgs e)
    {
        // Countdown of 5 seconds before the SendKeys starts sending.
        timer1.Start();
        System.Threading.Thread.Sleep(5000);
            for (int i = 0; i < richTextBox1.Lines.Length; i++)
        { 
            SendKeys.Send( richTextBox1.Lines[i] + "\r\n"); 
            // First line 
            // Start timer1 agian to read second line.
            //
        }
        // Loop ends when it hits the last line (Bottom).
}

以下代码中发生的事情并非我所需要的, 它将以分开的线条立即发送整个文本。 像这样:

Hello im here

Here to create

Create for honor

honor for all

all for hello

Hello im here

Here to create

Create for honor

honor for all

all for hello

但我需要这样:

Hello im here 
//first line -> Timer1 ends -> Start Timer1 agian to read second line
Here to create
//Second line -> Timer1 ends -> Start Timer1 agian to read third line
Create for honor
//Third line -> Timer1 ends -> Start Timer1 agian to read fourth line

等。等等。直到循环击中最后一行并停在最后一行。

1 个答案:

答案 0 :(得分:2)

你的计时器实际上没有做任何事情,因为你正在使用Thread.Sleep而不是等待计时器事件 - 所以你在开始时睡了一次5秒,然后再也没有。

只需将您的代码更改为:

for (int i = 0; i < richTextBox1.Lines.Length; i++)
{
    System.Threading.Thread.Sleep(5000);
    SendKeys.Send(richTextBox1.Lines[i] + "\r\n");
}

这样,每次迭代你都会睡5秒,然后再转到下一行。

如果您在示例中显示了多个换行符,请检查Lines字符串是否已包含终止换行符(在这种情况下,您将使每个字符串以两个换行符结尾) )。

值得注意的是,除非在UI线程上发生这种情况(不建议),否则用户可以在执行此操作时愉快地编辑文本框的文本。您应该执行一些UI操作来阻止它,或者只是在函数开头复制Lines成员并使用副本。