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



所以我试图让用户输入一些从类变量派生其数据的输入。用户将通过文本框输入其输入,并在完成后按回车键,从而导致事件更新类变量。但是,我的问题是弄清楚如何从事件处理程序发送信号以继续该过程。我知道一个简单的解决方案是将触发的代码放在事件方法中,但我想在此文本框和输入中使用多种方法。

以下是我的代码当前的样子:

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

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

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

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

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);          
        }
    }
}

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

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
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新