是否有命令等待用户输入值?

问题描述 投票:0回答:3

`C# 表单应用程序中 C# 控制台应用程序中的 readline 命令相当于什么?

在c#控制台应用程序中从用户处获取值的console.i可以使用readline();,但是当涉及到c#表单应用程序时,是否有这样的代码从用户处获取值?我通过文本框获取值没有问题。例如,当制作一个应用程序循环从用户那里获取 20 个值并将它们添加到列表框中时,情况会怎样?

如何在不使用数组的情况下做到这一点?`

int number;
for (int i = 0; i < 20; i++) {
    number = Convert.ToInt32( textBox1.Text);
    listBox1.Items.Add(number);
}

当我运行这段代码时,它自然会写出 20 个相同的数字。

c#
3个回答
0
投票

您混淆了控制台应用程序方法和 WinForms 方法。在 Console 中,您可以中断当前工作流程并等待输入,例如 Console.ReadLine(),但是 WF 中没有直接替代品,因为它与触发器(例如按钮)配合使用来暂停、插入并让它运行。简而言之:您触发了一个事件。

所以不存在真正的等价物


0
投票

WinForms 和大多数其他 UI 框架都是事件驱动的,这意味着它们的控件等待事件触发发生。不存在全局“等待任何用户输入”这样的事情,因为与控制台相比,图形用户界面 (GUI) 中的事件远多于键盘事件。 可以是一个按键事件,但它也可以是一些鼠标事件、计时器事件或其他事件。在控制台中,大多数这些都没有概念,因此您通常只是等待关键事件发生,这就是

Console.ReadLine
所做的。

因此您需要等待特定事件,例如通过写这个:

myTextBox.Changed += (sender, e) => MessageBox($"You typed { myTextbox.Text }");

这将等待文本框上的按键事件。一旦该事件发生,它将弹出一个

MessageBox
并打印您在该文本框中输入的内容。 您还可以等待整个表单上的鼠标事件:

myForm.MouseMove += (sender, e) => myTextBox.Text = $"Your mouse is at { e.X }, { e.Y }".

这些只是非常简单的示例,您可以在这些事件处理程序中执行任何任意逻辑,例如修改其他控件,例如文本框旁边的标签,执行对某些服务的任何请求,或者也打开其他表单。


0
投票

使用文本框 KeyDown 事件。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13) // on enter
            {
                listBox1.Items.Add(textBox1.Text);
                textBox1.Focus();
                textBox1.Text = "";
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.