Продолжить выполнение метода, когда событие происходит в окнах форм - PullRequest
0 голосов
/ 31 мая 2019

Я занимаюсь разработкой приложения для форм Windows, которое работает очень похоже на консоль.Функциональность, которую я пытаюсь реализовать, должна работать так же, как и Console.ReadLine(), с кнопкой Windows вместо того, чтобы пользователь нажимал клавишу ввода.В форме есть текстовое поле, в котором отображается выходной текст, и текстовое поле, в которое пользователь может вводить информацию (показано на рисунке).

Редактировать: я хотел бы, чтобы приложение получало информацию из текстового поля ввода, а затем назначало эту информацию переменной в функции Start() при нажатии кнопки ввода.Проблема, с которой я сталкиваюсь, состоит в том, чтобы сделать это несколько раз для одной и той же функции без дальнейшего продвижения в функции (то есть, отображая неверную информацию в текстовом поле вывода).

image of windows forms

Насколько я понимаю, мне нужно использовать событие нажатия кнопки «Ввод», но я не уверен, что придется «приостанавливать» функцию до нажатия кнопки ввода..

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void TextTop_Changed(object sender, EventArgs e)
    {

    }

    private void Enter_Clicked(object sender, EventArgs e)
    {
        textBottom.Text = string.Empty;
    }

    private void Start_Click(object sender, EventArgs e)
    {
        start();
    }

    public void textBoxInput(string message)
    {
        textTop.Text = message;
    }

    public void start()
    {
        textBottom.Text = "Enter name:";

        //need to wait here until enter button is clicked.

        string name = textTop.Text;//get input from top text box

        textBottom.Text = "Enter description:";

        //need to wait here until enter button is clicked again.

        string description = textTop.Text; //get input from top text box
    }
}

1 Ответ

0 голосов
/ 31 мая 2019

Мне кажется, что вы пытаетесь смоделировать консольное линейное приложение, которое выполняется последовательно.Как уже отмечали другие, Windows Forms не работают последовательно.События запускаются вместо.

Я считаю, что вам нужно сохранить внутреннее состояние ваших операций.Для этой цели используйте набор переменных с областью видимости:

public class Form1 : Form
{
    public const int STEP_INITIAL = 0;
    public const int STEP_GET_NAME = 1;
    public const int STEP_GET_DESCRIPTION = 2;
    public const int STEP_INFO_GATHERED = 3;

    private int _step = STEP_INITIAL;
    private string _name;
    private string _description;

}

Ваш метод Start может затем проверить текущее состояние и сделать то, что ему нужно:

public void start()
{
    switch (_step)
    {
        case STEP_INITIAL:
            textBottom.Text = "Enter name:";                    
            _step = STEP_GET_NAME;
            break;
        case STEP_GET_NAME:
            _name = textTop.Text;
            if (string.IsNullOrWhiteSpace(_name))
                MessageBox.Show("Please enter a valid name!");
            else
            {
                textBottom.Text = "Enter description:";
                textTop.Clear();
                _step = STEP_GET_DESCRIPTION;
            }
            break;
        case STEP_GET_DESCRIPTION:
            _description = textTop.Text;
            if (string.IsNullOrWhiteSpace(_description))
                MessageBox.Show("Please enter a valid description!");
            else
            {
                //This is your final state, where they have entered all the information
                _step = STEP_INFO_GATHERED;
            }
            break;
    }                       
}

Есть [очевидно] более элегантные способы сделать это, но это должно указать вам правильное направление.Пожалуйста, проверьте синтаксис, я сделал это изо всех сил.

Наконец, это было бы намного проще, если бы у вас было всего два текстовых поля для имени и описания ...: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...