C# 当我想使用WaitCursor时,如何正确使用Form.AcceptButton?
我决定创建一个登录表单,并首次使用form.AcceptButton属性。我的登录功能运行时锁定控件有问题 当我按enter键登录时,表单在光标变为WaitCursor之前冻结,控件被锁定 当我单击login按钮时,在光标更改为WaitCursor并且控件被锁定后,表单将冻结 以下是我的简化代码:C# 当我想使用WaitCursor时,如何正确使用Form.AcceptButton?,c#,winforms,.net-4.5,C#,Winforms,.net 4.5,我决定创建一个登录表单,并首次使用form.AcceptButton属性。我的登录功能运行时锁定控件有问题 当我按enter键登录时,表单在光标变为WaitCursor之前冻结,控件被锁定 当我单击login按钮时,在光标更改为WaitCursor并且控件被锁定后,表单将冻结 以下是我的简化代码: private void btnLogin_Click(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor;
private void btnLogin_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
// foreach loop that sets Enabled = false on all controls on form
LockControls();
// this function tries to login to SOAP web service, sometimes it takes few seconds
Login();
this.Cursor = Cursors.Default;
// foreach loop that sets Enabled = true on all controls on form
UnlockControls();
}
您正在使用哪个版本的.Net Framework和Windows。我测试了以下代码,这两种情况与您喜欢的完全相同:
private void btnLogin_Click(object sender, EventArgs e)
{
Cursor = Cursors.WaitCursor;
foreach (var c in this.Controls.OfType<Control>())
c.Enabled = false;
Thread.Sleep(5 * 1000);
Cursor = Cursors.Default;
foreach (var c in this.Controls.OfType<Control>())
c.Enabled = true;
}
在我的Win7、VS2012上,这同样有效:
private void button1_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
LockControls(true);
Login();
this.Cursor = Cursors.Default;
LockControls(false);
}
private void LockControls(bool mylock)
{
this.Enabled = !mylock;
}
private void Login()
{
Thread.Sleep(5 * 1000);
}
单击按钮或按enter键时,当控件处于禁用状态时,会出现等待光标。@Hans这是我最喜欢的问题之一。这不是重复的问题,并且此.UseWaitCursor没有帮助。请先阅读有关锁定控件的部分,然后再将其标记为“重复”。@Grantwiney没有处理回车键的代码。看起来表单的AcceptButton属性为我做了并处理了它。请阅读: