-2

私は現在、別の入力フォームを介して制御する必要がある議題を作成しています。

このフォームでは、次の入力フィールドを移動する前に、ユーザー入力を待つ必要があります。

以下は、タスクを追加するためのToDoフィールドのエントリです。その後、日付、時刻、リマインダーのフィールドもあります。

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. [OK]ボタンと[キャンセル]ボタンが無効になっているフォームを作成します
  2. すべてのコントロールバーを最初のコントロールバーを無効にします。
  3. 次のコントロールを有効にするために、最初のテキストボックスで、テキストの変更にイベントを追加します(適切な検証を行います)。
  4. すべてのコントロールに対して手順3を繰り返します。

UIコードにThread.Sleepを導入しないでください。これにより、フォームがロックされ、応答が停止します。

于 2012-05-02T13:41:33.693 に答える
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 に答える
0

ユーザーから入力を受け取る代わりに、連鎖選択ステートメントを使用してこれを行うことができると思います。ドロップダウンメニューから選択するオプションをユーザーに与えることができ、選択したオプションに応じて、チュートリアルhttp://tutorialzine.com/でさらにフォームを提供できます。 2011/11 / chained-ajax-selects-jquery /

于 2012-05-02T13:47:24.130 に答える