`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 个相同的数字。
您混淆了控制台应用程序方法和 WinForms 方法。在 Console 中,您可以中断当前工作流程并等待输入,例如 Console.ReadLine(),但是 WF 中没有直接替代品,因为它与触发器(例如按钮)配合使用来暂停、插入并让它运行。简而言之:您触发了一个事件。
所以不存在真正的等价物
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 }".
这些只是非常简单的示例,您可以在这些事件处理程序中执行任何任意逻辑,例如修改其他控件,例如文本框旁边的标签,执行对某些服务的任何请求,或者也打开其他表单。
使用文本框 KeyDown 事件。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13) // on enter
{
listBox1.Items.Add(textBox1.Text);
textBox1.Focus();
textBox1.Text = "";
}
}