我现在有一个奇怪的问题,我的程序中有一个登录表单。基本上,如果用户输入了错误的登录名,然后点击弹出窗口中的输入,则会关闭它并再次提交登录表单。有没有办法阻止这种情况?因此,当用户按Enter键关闭弹出窗口时,输入按下不会在我的登录表单中注册?
来自我登录表单的代码。 Button1是登录按钮谢谢!
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("Please enter a username and password!");
}
else
{
bool loggedin = false;
for (int i = 0; i <= Program.ProfileList.Count - 1; i++)
{
if (Program.ProfileList[i].Username == textBox1.Text)
{
AESEncrypt encrypt = new AESEncrypt();
if (Program.ProfileList[i].Password == encrypt.EncryptToString(textBox2.Text))
{
MessageBox.Show("Succesfully logged in!");
Program.ActiveUser = textBox1.Text;
loggedin = true;
this.Close();
}
}
}
if (!loggedin)
{
MessageBox.Show("Incorrect username or password!");
}
}
}
private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
button1.PerformClick();
}
}
答案 0 :(得分:1)
这是因为您使用了KeyUp事件。并按下Enter键以关闭消息框。这是正确的,它使用KeyDown事件。因此对话框关闭,TextBox获得焦点并释放Enter键。要再次触发KeyUp事件:)
还要打开扬声器,听听令人讨厌的DING!你从不喜欢Enter键的文本框中得到。
改为使用KeyDown事件:
private void textBox2_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Enter) {
button1.PerformClick();
e.Handled = e.SuppressKeyPress = true;
}
}
答案 1 :(得分:0)
当出现此问题时,焦点是textBox2
所代表的TextBox?这可能是发生的事情:
我对此并不乐观,但是当收到回车键的按键事件时,很可能会关闭MessageBox。焦点更改回登录表单,特别是密码字段(焦点在显示MessageBox之前)。密钥启动事件被发送到焦点对照,即密码字段 - 再次触发登录检查。
要解决此问题,请删除密钥向上处理程序并将Form.AcceptButton属性设置为“确定/登录”按钮,并将Form.CancelButton属性设置为“取消”按钮。这将自动允许enter进入OK / Login按钮,Escape按下Cancel按钮。
答案 2 :(得分:0)
您可以按如下方式解决。您还必须将KeyPreview
属性设置为true。
获取或设置一个值,该值指示表单是否将接收密钥 将事件传递给具有焦点的控件之前的事件。
private void Form1_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
}
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text.Trim()) || string.IsNullOrEmpty(textBox2.Text.Trim()))
{
MessageBox.Show("Please enter a username and password!");
}
else if (IsValidUser(textBox1.Text.Trim(), textBox2.Text.Trim()))
{
MessageBox.Show("Succesfully logged in!");
Program.ActiveUser = textBox1.Text;
this.Close();
}
else
{
MessageBox.Show("Incorrect username or password!");
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
button1.PerformClick();
}
}
private bool IsValidUser(string userName, string userPassword)
{
for (int i = 0; i <= Program.ProfileList.Count - 1; i++)
{
if (Program.ProfileList[i].Username == userName)
{
AESEncrypt encrypt = new AESEncrypt();
if (Program.ProfileList[i].Password == encrypt.EncryptToString(userPassword))
{
return true;
}
else
{
return false;
}
}
}
return false;
}