我有2个事件处理程序附加到同一表单上的按钮。我想在方法运行时禁用表单并显示waitCursor,然后启用表单并将光标恢复为默认值。
这是奇怪的部分:几乎相同的代码,其中一个事件起作用,另一个不起作用!这可能有什么问题?
这个有效。
private void btnExceptionReport_Click(object sender, EventArgs e)
{
lblStatus.Text = "Printing exception report.";
ActiveForm.Cursor = Cursors.WaitCursor;
//Form.ActiveForm.Enabled = false;
if (DatabaseOps.printItemReport("Exceptions", cboEmployee.Text))
{
lblStatus.Text = "Exception report printed.";
}
else
{
MessageBox.Show("Error printing exception report.");
lblStatus.Text = "Error printing Exception report.";
}
//Form.ActiveForm.Enabled = true;
ActiveForm.Cursor = Cursors.Default;
}
当我尝试将光标更改回默认值时,这会引发错误,指出ActiveForm
为null
。
private void btnWIPReport_Click(object sender, EventArgs e)
{
lblStatus.Text = "Printing WIP Materials report.";
ActiveForm.Cursor = Cursors.WaitCursor;
//Form1.ActiveForm.Enabled = false;
if (DatabaseOps.printItemReport("WIP", cboEmployee.Text))
{
lblStatus.Text = "WIP Materials report printed.";
}
else
{
MessageBox.Show("Error printing WIP Materials report.");
lblStatus.Text = "Error printing WIP Materials report.";
}
//Form1.ActiveForm.Enabled = true;
ActiveForm.Cursor = Cursors.Default; //This line gives error saying ActiveForm is null
}
答案 0 :(得分:1)
您无需致电ActiveForm
。只需使用它就可以了:
Cursor = Cursors.Default;
答案 1 :(得分:0)
如果您只使用标准的Cursor和WaitCursor,则只需设置在控件中定义的bool属性UseWaitCursor。
似乎在您的代码中,您的表单可以作为“this”访问。
或者,如果您将'sender'强制转换为Button(?)并对类型化结果调用FindForm()方法,则可以选择使用Form。
你应该添加一些try / finally块来恢复光标,即使在你的'处理'代码中出现异常