Windows Forms与简单的Console App的区别

时间:2010-05-05 15:56:47

标签: c# winforms visual-studio-2008 console interaction

我目前开始将我的控制台项目“移植”到WinForms,但似乎我很难做到这一点。

我只是习惯于控制台结构:

我根据来自控制台的输入让我的类互相交互。 一个简单的流程:

Input -> ProcessInput -> Execute -> Output -> wait for input

现在我得到了这个大的Form1.cs(等)和“Application.Run(Form1);” 但我真的不知道我的类如何与表单交互并创建一个像我上面描述的流程。

我的意思是,我只是为表格内的每个“项目”提供了这些“...._ Click(object sender ....)”。 现在我不知道在哪里放置/启动我的流/循环,以及我的类如何与表单交互。

2 个答案:

答案 0 :(得分:5)

实际上很简单(虽然我可以同情你的困惑)......

<强> 1。输入
拥有TextBoxButton。当用户点击该按钮时,请将TextBox中的任何内容视为您的输入。

<强> 2。流程输入
在控制台应用程序中,用户在处理输入时无法执行任何操作。 Windows窗体应用程序中与此类似的是禁用用户可以提供输入的机制。因此,请设置TextBox.Enabled = falseButton.Enabled = false

第3。执行
运行您想要执行的任何方法。

<强> 4。输出
在表单上显示某种消息。这可能只是另一个TextBoxRichTextBox ......无论你想要什么。

<强> 5。等待输入
执行完第3步的方法后,您已在第4部分中显示输出,您可以继续并重新激活接受输入的机制:TextBox.Enabled = trueButton.Enabled = true

所以基本上你的代码应该是这样的:

void myButton_Click(object sender, EventArgs e) {
    try {
        myInputTextBox.Enabled = false;
        myButton.Enabled = false;

        var input = ParseInput(myInputTextBox.Text);

        var output = ExecuteMethodWithInput(input);

        myOutputTextBox.Text = FormatOutput(output);

    } finally {
        myInputTextBox.Enabled = true;
        myButton.Enabled = true;
    }
}

答案 1 :(得分:3)

基本上,您可以让表单提供一组用于输入数据的控件(即:一个或多个TextBox控件)。如果您有一个用户点击的按钮,并且您想要处理,只需双击某个按钮即可。这将为您提供一个事件处理程序,如:

private void button1_Click(object sender, EventArgs e)
{
     // Process Input from TextBox controls, etc.
     // Execute method
     // Set output (To other controls, most likely)
}

就是这样 - “循环”消失了,因为标准的Windows消息泵取而代之。