Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在间隔中键入字符?_C#_Winforms - Fatal编程技术网

C# 如何在间隔中键入字符?

C# 如何在间隔中键入字符?,c#,winforms,C#,Winforms,我正在写一个程序,它将在5秒钟的时间间隔内键入一行文本。现在,我要做的是添加一个函数,这个函数将一个字符一个字符地键入文本,每个字符之间留有小的空格。我正在尝试使用Thread.Sleep,但我的程序崩溃了,我不知道为什么 如何正确地做到这一点 private void Interval(object sender, EventArgs e) { if (cbPause.Checked == false) { SendKey

我正在写一个程序,它将在5秒钟的时间间隔内键入一行文本。现在,我要做的是添加一个函数,这个函数将一个字符一个字符地键入文本,每个字符之间留有小的空格。我正在尝试使用Thread.Sleep,但我的程序崩溃了,我不知道为什么

如何正确地做到这一点

    private void Interval(object sender, EventArgs e)
    {
        if (cbPause.Checked == false)
        {
            SendKeys.Send(txtText.Text + "{enter}");

            if (tbType.SelectedTab == tbInterval) tmrInterval.Interval = int.Parse(nudInterval.Value.ToString());
            if (tbType.SelectedTab == tbRange) tmrInterval.Interval = random.Next(int.Parse(nudMin.Value.ToString()), int.Parse(nudMax.Value.ToString()));
        }
        else if (cbPause.Checked == true)
        {
            Random random = new Random();

            foreach (char character in charList)
            {
                SendKeys.Send(character.ToString());
                Thread.Sleep(1000);
            }

            SendKeys.Send("{enter}");
        }
    }

    private void btnStart_Click(object sender, EventArgs e)
    {
        if (txtText.TextLength < 1 || txtText.Text == string.Empty)
        {
            lblMessage.Text = "You must type text to proceed!";
            btnStart.Enabled = false;
        }
        else
        {
            foreach (char character in txtText.Text)
            {
                charList.Add(character);
            }

            if (tbType.SelectedTab == tbInterval)
            {
                tmrDelay.Enabled = true;

                txtText.Enabled = false;
                nudInterval.Enabled = false;
                nudMin.Enabled = false;
                nudMax.Enabled = false;
                btnStart.Enabled = false;
                btnStop.Enabled = true;
            }

            if (tbType.SelectedTab == tbRange)
            {
                tmrDelay.Enabled = true;
                tbType.Enabled = false;
                txtText.Enabled = false;
                nudInterval.Enabled = false;
                nudMin.Enabled = false;
                nudMax.Enabled = false;
                btnStart.Enabled = false;
                btnStop.Enabled = true;
            }

            lblMessage.Text = "Starting auto typing in: 3";
        }
    }
private void Interval(对象发送方、事件参数e)
{
如果(cbPause.Checked==false)
{
SendKeys.Send(txtText.Text+“{enter}”);
if(tbType.SelectedTab==tbInterval)tmrInterval.Interval=int.Parse(nudInterval.Value.ToString());
if(tbType.SelectedTab==tbRange)tmrInterval.Interval=random.Next(int.Parse(numdmin.Value.ToString()),int.Parse(nummax.Value.ToString());
}
else if(cbPause.Checked==true)
{
随机=新随机();
foreach(字符列表中的字符)
{
SendKeys.Send(character.ToString());
睡眠(1000);
}
SendKeys.Send(“{enter}”);
}
}
私有void btnStart_单击(对象发送方,事件参数e)
{
if(txtText.TextLength<1 | | txtText.Text==string.Empty)
{
lblMessage.Text=“必须键入文本才能继续!”;
btnStart.Enabled=false;
}
其他的
{
foreach(txtText.Text中的字符)
{
charList.Add(字符);
}
如果(tbType.SelectedTab==tbInterval)
{
tmrDelay.Enabled=true;
txtText.Enabled=false;
nudInterval.Enabled=false;
numdmin.Enabled=false;
nummax.Enabled=false;
btnStart.Enabled=false;
btnStop.Enabled=true;
}
如果(tbType.SelectedTab==tbRange)
{
tmrDelay.Enabled=true;
tbType.Enabled=false;
txtText.Enabled=false;
nudInterval.Enabled=false;
numdmin.Enabled=false;
nummax.Enabled=false;
btnStart.Enabled=false;
btnStop.Enabled=true;
}
lblMessage.Text=“开始自动输入:3”;
}
}
如果您调用,这将挂起您的GUI线程

我要做的是,使用一个,每一个,让它键入下一个字符

public partial class Form1 : Form
{
    Timer timer;
    string str;
    int char_num;

    public Form1()
    {
        InitializeComponent();
        timer = new Timer();
        timer.Tick += timer_Tick;
    }

    void timer_Tick(object sender, EventArgs e)
    {
        SendKeys.Send(str.Substring(char_num++, 1));
        if (char_num == str.Length)
            timer.Stop();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Focus();
        str = "Jonathon";
        char_num = 0;
        timer.Interval = 1000;
        timer.Start();
    }
}
注意:如果不明显,此代码需要一个带有
textBox1
的表单,并且
Click
事件的按钮连接到
button1\u Click()

如果要立即发送第一个字符,可以在启动计时器时立即调用
勾选处理程序,通过添加以下行来“作弊”:

timer_Tick(null, EventArgs.Empty);

代码提示:如果你发现自己在做If(x==true){/*…*/}或者If(x==false){/*…*/},那么你的意思可能是If(x){/*…*/}或者{/*…*/}或者{/*…*/}。另外,你得到的异常是什么?@minitech,一点也没有,它只是挂起,直到我注销远程机器…所以它不会崩溃?陛下当它挂起时,尝试暂停它-它停在哪一行代码上?@minitech,它不停。它只是挂起了,因为我正在使用远程桌面,所以我的整个远程桌面都停止了,唯一的解除挂起的方法是注销并重新登录,然后停止调试。我已经尝试过这个方法,但我不知道如何做到这一点,正如我在另一篇文章中解释的那样。嗯,我确实知道如何使用计时器。只是我已经使用了2个计时器,而我在使用另一个已经安装了2个计时器的计时器时遇到了问题。你可以拥有你想要的所有计时器,我不确定问题可能是什么。好的,使用子字符串而不是数组列表似乎可以。但是在第行:
SendKeys.Send(txtText.Text.Substring(b++,1))我在daying中遇到错误:
索引和长度必须引用字符串中的位置。
在计时器的第二次运行中。参数名称:纵向行末尾1的含义是什么?