我有一个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();
我也尝试了线程和任务,但这些都没有。 我有什么遗失的吗?
答案 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;
它终于奏效了!
但是因为我不确定为什么会这样,我很乐意接受另一个提供解释的解决方案。
注意:另一个奇怪的事情是,无论您放置这三个项目的顺序如何,光标仍将按预期执行