Портирование консольного интерфейса на графический интерфейс? - PullRequest
0 голосов
/ 23 июня 2011

Как большинство из вас знает, разработка консольного приложения так же проста, как:

void mainloop(){
    while (1){
        giveInstructions();
        getInput();
        if (!process()) break;
        printOutput();
    }
}

int main(){
    mainloop();
    return 0;
}

Однако в графическом интерфейсе это становится проблемой.

Мы все еще можем giveInstructions(), process() и printOutput(), но getInput() не будет работать, потому что это зависит от события, обычно нажатия кнопки или нажатия клавиши вниз.

Как перенести консольное приложение в приложение с минимальным изменением кода? (желательно не менять метод main, и как можно меньше менять функцию mainloop)

Примечание: мне пока не очень удобно работать с потоками.

1 Ответ

1 голос
/ 23 июня 2011

Поскольку конкретный язык не указан, я покажу пример на C #, где вы сможете использовать тот же код, что и консольное приложение, с простым графическим интерфейсом.

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

        private void Form1_Load(object sender, EventArgs e)
        {
            //using form-editor, double-click buttons or use the following
            btnInput.Click += new EventHandler(btnInput_Click);
            btnContinue.Click += new EventHandler(btnContinue_Click);
            giveInstructions();
        }

        private void giveInstructions()
        {
            txtInfo.Text = "";
            txtInput.Text = "";
            //display instructions to multi-line textbox
        }

        private void btnInput_Click(object sender, EventArgs e)
        {
            //or you can just add another button for exit.
            if (txtInput.Text == "expected value for exit")
            {
                Application.Exit();
            }
            else
            {
                getInput();
            }
        }

        private void getInput()
        {
            string strInput = txtInput.Text;
            //do stuff

            printOutput();
        }

        private void printOutput()
        {
            //display output to multi-line textbox
        }

        private void btnContinue_Click(object sender, EventArgs e)
        {
            giveInstructions();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...