-1

我决定创建一个登录表单并Form.AcceptButton首次使用该属性。在我的Login函数运行时,我遇到了锁定控件的问题。

  • 当我按 Enter 登录时,表单在光标变为 之前冻结,WaitCursor并且控件被锁定。

  • 当我单击登录按钮时,表单在光标变为并且控件被锁定后冻结(首选行为)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(); 
}
4

2 回答 2

1

您正在使用什么版本的 .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;
}
于 2013-09-09T16:22:40.560 回答
1

在我的 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);     
    }

当单击按钮或按下回车键时控件被禁用时,将出现等待光标。

于 2013-09-09T17:45:45.393 回答