等待来自文本框的输入,类似于Console.Read()

时间:2017-11-08 01:51:01

标签: c# textbox user-input

所以我试图让用户输入一些从类变量派生数据的输入。用户将通过文本框输入他们的输入,并在完成时点击 return ,从而导致事件更新类变量。但是,我的问题是弄清楚如何从EventHandler发送信号以继续该过程。我知道一个简单的解决方案是在事件方法中触发代码,但我想在这个文本框和输入中使用多个方法。

这是我的代码目前的样子:

public partial class Form1 : Form
{
    private String input;

    public Form1()
    {
        InitializeComponent();
        outbox.AppendText("Hello World!"); //outbox is the display
        start();
    }

    private void inbox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)13)
        {
            input = inbox.Text; //inbox is the textbox for input;
        }
        else
        {
            //do nothing
        }
    }

    private void start()
    {
        outbox.AppendText("Enter one, two, three or four.");

        //---
        //this is where the issue arises
        //---

        if (text_input.Equals("one"))
        {
           outbox.AppendText("Sunflowers");
        }
        else if (text_input.Equals("two))
        {
           outbox.AppendText("Tulips");
        }
        else if (text_input.Equals("three"))
        {
           outbox.AppendText("Daisies");
        }
        else if (text_input.Equals("four"))
        {
           outbox.AppendText("Poppies");
        }
        else if (text_input.Equals("quit"))
        {
           Application.Exit();
        }
        else
        {
           outbox.AppendText("Try again.");
           start();
        }
    }
}

在用户点击返回并将字符串传递给input之前,我该怎么做才能暂停该程序?

2 个答案:

答案 0 :(得分:0)

您可能应该将用户输入之前的操作与用户输入后之后发生的操作分开。

如果您想实施不同的行为,那么存储程序状态可能会有所帮助,包括您在用户输入完成后要执行的操作。

尝试这样的事情,并根据需要进行调整:

public partial class Form1 : Form
{
    private String input;

    private enum InputMode {
      None,
      Numbers
    }

    private class ModeDefinition{
      public InputMode Mode {get; private set; }
      public string Prompt{get; private set; }
      public Action ActionMethod{get; private set; }

      public ModeDefinition(InputMode mode, string prompt, Action actionMethod)
      {
          this.Mode = mode;
          this.Prompt = prompt;
          this.ActionMethod = actionMethod;
      }
    }

    private InputMode currentMode;

    private Dictionary<InputMode,ModeDefinition> modeDefinitions;

    public Form1()
    {
        InitializeComponent();
        outbox.AppendText("Hello World!"); //outbox is the display

        initialise();

        currentMode = InputMode.Numbers;
        commenceAction(modeDefinitions[currentMode]);

    }

    private void initialise(){

      modeDefinitions = new Dictionary<InputMode,ModeDefinition>();

      var def1 = new ModeDefinition(InputMode.Numbers, "Enter one, two, three or four.", numbersAction);
      modeDefinitions.Add(InputMode.Numbers, def1);

    }

    private void commenceAction(ModeDefinition modeDefinition){
      outbox.AppendText(modeDefinition.Prompt);
    }

    private void inbox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)13)
        {
            input = inbox.Text; //inbox is the textbox for input;

            var currentMode = modeDefinitions[currentMode];

            // Execute the mode action
            currentMode.ActionMethod();
        }
        else
        {
            //do nothing
        }
    }

    private void numbersAction(){

        if (text_input.Equals("one"))
        {
           outbox.AppendText("Sunflowers");
        }
        else if (text_input.Equals("two))
        {
           outbox.AppendText("Tulips");
        }
        else if (text_input.Equals("three"))
        {
           outbox.AppendText("Daisies");
        }
        else if (text_input.Equals("four"))
        {
           outbox.AppendText("Poppies");
        }
        else if (text_input.Equals("quit"))
        {
           Application.Exit();
        }
        else
        {
           outbox.AppendText("Try again.");

          var currentMode = modeDefinitions[currentMode];
          outbox.AppendText(modeDefinition.Prompt);          
        }
    }

}

答案 1 :(得分:0)

不知道我的解决方案是你需要的 首先,你声明这样的属性

private string _content;

private string content
{
    set
    {
        if (value != _content)
        {
            _content = value;

            checkContent();
        }
    }

    get
    {
        return _content;
    }
}




private void checkContent()
{
    if (content.Equals("one"))
    {
        outbox.AppendText("Sunflowers");
    }
    else if (content.Equals("two"))
    {
        outbox.AppendText("Tulips");
    }
    else if (content.Equals("three"))
    {
        outbox.AppendText("Daisies");
    }
    else if (content.Equals("four"))
    {
        outbox.AppendText("Poppies");
    }
    else if (content.Equals("quit"))
    {
        Application.Exit();
    }
    else
    {
        outbox.AppendText("Try again.");

        start();
    }
}

    private void start()
    {
        outbox.AppendText("Enter one, two, three or four.");
    }

    private void inbox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)13)
        {
            content = inbox.Text; //inbox is the textbox for input;
        }
        else
        {
            //do nothing
        }
    }
}