停止DialogResult窗口将鼠标更改回默认值

时间:2015-03-19 17:20:45

标签: c# winforms cursor messagebox

我有一个MessageBox窗口的问题,我将等待光标改回默认值,不让我再次覆盖它。如果我发表评论"你确定"消息框等待光标按预期工作(等待光标在长时间运行方法期间可见)。然而,无论我做什么,程序都是正常的,鼠标始终是默认的。

    private void btn_Click(object sender, EventArgs e)
    {
        this.Cursor = Cursors.WaitCursor;

        if (string.IsNullOrWhiteSpace(textbox1.Text))
        {
            MessageBox.Show("Text Box 1 Can't Be Empty");
        }
        else if (string.IsNullOrWhiteSpace(textbox3.Text))
        {
            MessageBox.Show("Text Box 3 Can't Be Empty");
        }
        else if (string.IsNullOrWhiteSpace(textbox4.Text))
        {
            MessageBox.Show("Text Box 4 can't be empty");
        }
        else if (string.IsNullOrWhiteSpace(textBox2.Text))
        {
            HelperClass.MethodThatCanHandleEmptyTextBox2(textBox1.Text, textBox3.Text, textBox4.Text));
        }
        else 
        {
            //problem line                
            DialogResult result = MessageBox.Show("Are you sure you wish to proceed?", "Are You Sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

            if (result == DialogResult.Yes)
            {
               this.Cursor = Cursors.WaitCursor; //doesn't work                   

               //long running method
               HelperClass.DoMethodThatNeedsAllFields(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text); //long running method

               MessageBox.Show("All done!");
            }
         }

         this.Cursor = Cursors.Default;
      }

我已经在if(result == yes)条件的内部和外部尝试了所有这些,但无济于事:

Cursor = Cursors.WaitCursor;

Form1.ActiveForm.UseWaitCursor = true; //抛出运行时异常

Cursor.Current = Cursors.WaitCursor;

Application.UseWaitCursor = true;

Application.DoEvents();

我也尝试了线程和任务,但这些都没有。 我有什么遗失的吗?

2 个答案:

答案 0 :(得分:0)

你应该这样做:

Application.UseWaitCursor = true;
Application.DoEvents();

这绝对有效。在消息框完成之后完成,您之前不需要它。消息框恢复为false。

尽管如此,我非常确定this.Cursor = Cursors.WaitCursor;也必须正常工作,并且消息框应将其更改回默认值。但上述方法更为常见。

有时,DoEvents()可能不方便,但取决于您的用户界面的复杂性,因为它可能会触发一些背景事件,即聊天消息,tcp消息或您为UI提供的任何内容。

答案 1 :(得分:0)

改变:

 this.Cursor = Cursors.WaitCursor;

为:

 Cursor.Current = Cursors.WaitCursor;
 this.Cursor = Cursor.Current;

它终于奏效了!

但是因为我不确定为什么会这样,我很乐意接受另一个提供解释的解决方案。

注意:另一个奇怪的事情是,无论您放置这三个项目的顺序如何,光标仍将按预期执行