C#Windows窗体文本框输入
我目前正在尝试制作一个应用程序(只是为了学习目的,尝试习惯C#,因为我是一个新手),我想在表单中创建一种可以说是终端的应用程序。我决定尝试使用多行文本框,并尝试使用if和else语句,但当我进入文本框并开始键入时,它会在每次击键后立即转到为“else”设置的错误消息。我不知道是什么,但我觉得我错过了什么。有什么建议吗?另外,是否可以单独为该应用程序创建我自己的“命令”?我说的是,当你输入“program_speech”时,它会弹出一个对话框,要求用户输入,它基本上会使用内置的Windows语音合成器将文本转换为语音。谢谢感谢您的帮助C#Windows窗体文本框输入,c#,C#,我目前正在尝试制作一个应用程序(只是为了学习目的,尝试习惯C#,因为我是一个新手),我想在表单中创建一种可以说是终端的应用程序。我决定尝试使用多行文本框,并尝试使用if和else语句,但当我进入文本框并开始键入时,它会在每次击键后立即转到为“else”设置的错误消息。我不知道是什么,但我觉得我错过了什么。有什么建议吗?另外,是否可以单独为该应用程序创建我自己的“命令”?我说的是,当你输入“program_speech”时,它会弹出一个对话框,要求用户输入,它基本上会使用内置的Windows语音合
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Terminator //Lol Terminator Reference
{
public partial class Form1 : Form
{
private string answer;
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (answer == "help")
{
MessageBox.Show("There is only 2 commands as of now and that is 'help' and 'program_speech' ");
}
else if (answer == "program_speech")
{
MessageBox.Show("Still currently under creation");
}
else
{
MessageBox.Show("Invalid Command. Please try again or type help for current available commands");
}
}
}
}
您必须确保正在使用
TextBox
的值初始化answer
变量的值,并将事件从TextChanged更改为LostFocus
private void textBox1_LostFocus(object sender, EventArgs e)
{
answer = textBox1.Text;
if (answer == "help")
{
MessageBox.Show("There is only 2 commands as of now and that is 'help' and 'program_speech' ");
}
else if (answer == "program_speech")
{
MessageBox.Show("Still currently under creation");
}
else
{
MessageBox.Show("Invalid Command. Please try again or type help for current available commands");
}
}
每次击键时都会引发一个名为TextChanged的事件,它会转到“无效命令”的else条件,因为当时该文本框中的文本既不是“帮助”也不是“程序语音”。绝对不建议使用TextChanged 您应该使用按钮及其单击事件来检查textbox的值。因为这是确保所有所需文本都已写入的唯一方法。可能是这样的-
private void btnCheckText_Click(object sender, EventArgs e)
{
answer = textBox1.Text;
if (answer == "help")
{
MessageBox.Show("There is only 2 commands as of now and that is 'help' and 'program_speech' ");
}
else if (answer == "program_speech")
{
MessageBox.Show("Still currently under creation");
}
else
{
MessageBox.Show("Invalid Command. Please try again or type help for current available commands");
}
}
最好做一个输入按钮,在按下输入按钮后从文本框中读取文本
private void Button1_Enter(object sender, EventArgs e)
{
input = textbox.Text;
//then do a switch case
初始化
应答
至textbox1.text
。我想你已经不知怎么做到了。如果不是,基索的答案就是你应该做的
发生这种情况的原因是,您的textBox1\u TextChanged
将在每次您的文本框中发生一次更改时被解雇。因此,当您键入任何字母时,文本框文本将发生变化,函数将被触发,从而触发else语句。例如,键入h
,==>Textbox注册更改并调用textBox1\u TextChanged
,因为文本不是help
,如果在else部分中出现。重复此操作直到hel
为止,直到您完全输入help
如果您在文本框最终读取help
时尝试,它将跟随MessageBox.Show(“目前只有两个命令,即“help”和“program_speech”)代码>指定的命令
根据对话内容,你需要创建一个新的表单,并在需要时调用它。正如你们提到的,我会推荐你们看这个教程。我知道它已经过时了,但它涵盖了你的大部分疑虑。我是从它开始的,我想你也应该这样
此外,我不认为多行文本框是最好的选择,当你想做一个终端一样的结构。希望我消除了你的大部分疑虑。好吧,
我想我已经发现了问题所在。
名为“answer”的字符串
变量是否应该存储用户输入的命令?
因为在你的代码中没有提到它,
因此,请尝试在text\u changed
void的开头添加这一行:
answer = textBox1.Text;
如果您是C#新手,这意味着您使用textBox1的属性文本并将其存储在answer中
希望它能起作用 我在这里读过答案
原因已找到问题。因为文本更改事件是在文本框的文本更改的每次更改时触发的
这里提到了两个很好的工作建议
- 要使用独占按钮并在按钮单击时执行逻辑
- 使用Textbox的失去焦点事件
这两种方法都要求用户最终离开文本框。(因此,如果他想输入另一个命令,他需要在终端(文本框)中重新输入
但在这里,我想知道为什么没有人建议跟踪Enter
press,只有在按下Enter键时才执行逻辑。在这里,用户不必离开终端(textbox)而不费吹灰之力地发出另一个命令
你可以像下面这样做
首先,使用Textbox的“向上键”事件,稍后将触发该事件,然后单击“向下键”(以确保在Textbox中正确输入输入)
谢谢!我刚刚添加了它,但我似乎在每次按键后都会遇到同样的错误。然后你应该将事件从TextChange更改为LostFocusOkay,我知道发生了什么。谢谢!我让它运行起来了谢谢!现在关于终端接口的最后一部分,我该如何处理?我只能给出一些提示。做2文本框。1非只读。在另一个文本框中,用户给出输入并点击旁边的按钮。单击按钮可清除文本框内容,并释放另一个文本框中的输出,条件为“如果”。如果不想使用该按钮,请查看并确保将onKeyDown listener设置为@Rishav onKeyDown listener的函数直到OP实际遇到同样的问题。它将在每次按键时出现,这将产生同样的问题,控件将进入“else”部分。@ArpitGupta如果你检查我提供的链接,你会发现答案会专门检查Enter
是否被点击。如果被点击,OP应该调用检查e条件(此处为textBox1\u TextChanged
,在本例中不是最佳函数名称,因为它不再是textchange事件
)。在我的示例中,OP没有textboxChange
的侦听器。应该是“只有两个命令”:P
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
answer = textBox1.Text;
if (answer == "help")
{
MessageBox.Show("There is only 2 commands as of now and that is 'help' and 'program_speech' ");
}
else if (answer == "program_speech")
{
MessageBox.Show("Still currently under creation");
}
else
{
MessageBox.Show("Invalid Command. Please try again or type help for current available commands");
}
}
}