C# 当我想使用WaitCursor时,如何正确使用Form.AcceptButton?

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;

我决定创建一个登录表单,并首次使用form.AcceptButton属性。我的登录功能运行时锁定控件有问题

当我按enter键登录时,表单在光标变为WaitCursor之前冻结,控件被锁定

当我单击login按钮时,在光标更改为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属性为我做了并处理了它。请阅读: