-2

我目前正在制定一个议程,该议程应通过单独的输入表单进行控制。

在此表单上,我需要等待用户输入才能移动下一个输入字段。

下面是用于添加任务的待办事项字段的条目。之后,它还有日期、时间和提醒字段。

private void btn_Say_Click(object sender, EventArgs e)
{
    string text = tbx_Say.Text;

    if(text.Contains("Add") || text.Contains("add"))
    {
       if(text.Contains("Task") || text.Contains("task"))
       {
            screen.btn_Tasks.PerformClick();
            while(screen.task.tb_TaskToDo.Text == "")
            {
                tbx_Anne.Text = "What should happen?";
                Thread.Sleep(1000);
            }
        }
    }
}

执行点击会启动一个新的,需要通过输入表单填写。不管有没有 Thread.Sleep(1000),这个表单都不会完全显示,它会等待我无法给出的用户输入......

4

3 回答 3

4

这看起来很像这样做的错误方法。我会建议

  1. 创建一个弹出带有禁用的确定按钮和启用的取消按钮的表单
  2. 使所有控件栏第一个禁用。
  3. 在文本更改时添加一个事件,在第一个文本框上启用下一个控件(进行适当的验证)。
  4. 对所有控件重复步骤 3。

不要在你的 UI 代码中引入 Thread.Sleep,这会导致表单锁定并停止响应。

于 2012-05-02T13:41:33.693 回答
0

我认为您可以使用链式选择语句来执行此操作,而不是从用户那里获取输入,您可以为他们提供从下拉菜单中选择的选项,并根据所选选项,您可以在此处提供进一步的表格,例如教程http://tutorialzine.com/ 2011/11/chained-ajax-selects-jquery/

于 2012-05-02T13:47:24.130 回答
0

同时,我已经解决了我的问题,对其进行了测试,并且可以正常工作。

    private void btn_Say_Click(object sender, EventArgs e)
    {
        string text = tbx_Say.Text;
        tbx_Say.Text = "";
        if (status == 0)
        {
            if (text.Contains("Add") || text.Contains("add"))
            {
                if (text.Contains("Task") || text.Contains("task"))
                {
                    screen.btn_Tasks.PerformClick();
                    tbx_Anne.Text = "What should happen?";
                    status = 1;
                }
            }
        }
        else if (status == 1) // to do
        {
            if (text != "")
            {
                screen.task.tb_TaskToDo.Text = text;
                tbx_Anne.Text = "On which date?";
                status = 2;
            }
        }
        else if (status == 2) // date
        {
            DateTime date;
            if(DateTime.TryParse(text, new CultureInfo("nl-NL"), DateTimeStyles.None, out date))
            {
                screen.task.dateTimePickerTask.Value = date;
                tbx_Anne.Text = "And what time?";
                status = 3;
            }
            else
            {
                tbx_Anne.Text = "Please nter date as dd-mm-yyyy.";
            }
        }
        else if (status == 3) // time
        {
            int h;
            int m;
            if(text.Length == 5 && Int32.TryParse(text.Substring(0,2), out h) && text[2] == ':' && Int32.TryParse(text.Substring(3), out m))
            {
                screen.task.tb_TimeTask.Text = text;
                tbx_Anne.Text = "Do you want to add reminders?";
                status = 4;
            }
            else
            {
                tbx_Anne.Text = "Please insert time as hh:mm.";
            }
        }
    }
于 2012-05-03T09:39:18.880 回答