将基于控制台的ui移植到GUI?

时间:2011-06-23 04:06:41

标签: user-interface design-patterns console

正如大多数人所经历的那样,开发控制台应用程序非常简单:

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

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

然而,在GUI中它成为一个问题。

我们仍然可以giveInstructions()process()printOutput(),但getInput()不起作用,因为它依赖于某个事件,通常是按钮点击或按键。< / p>

如何以最少的代码更改将控制台应用程序移植到gui应用程序? (最好不要改变main方法,尽可能少改变mainloop函数)

注意:我对线程感觉不太满意。

1 个答案:

答案 0 :(得分:1)

由于没有给出特定的语言,我将在C#中展示一个示例,您可以使用与控制台应用程序相同的代码和简单的GUI。

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