假设对于WinForms应用程序中的每个Form,您希望将光标更改为WaitCursor。显而易见的方法是将代码添加到实例化/显示表单的每个位置:
Try
Me.Cursor = Cursors.WaitCursor
Dim f As New frmMyForm
f.Show()
Catch ex As Exception
Throw
Finally
Me.Cursor = Cursors.Default
End Try
但是,我想知道是否有办法告诉你的应用程序,“每当任何表单Load事件触发时,显示一个WaitCursor。当表单事件显示完成时,将光标设置回Default。”这样,Me.Cursor代码可能只在一个地方而不是分散在整个应用程序中 - 并且不会忘记将它放入每个表单实例化中。
我想您可以继承常规Form类并在重写事件中添加游标设置,但我相信当您继承Form对象时,您将失去可视化设计器功能。
答案 0 :(得分:3)
子类化是一个选项,只要你没有将超类设置为mustinherit就不会丢失设计器,它实际上并不喜欢它。
答案 1 :(得分:2)
要回答您的问题 - 没有全球.Net活动可以实现您的目标。没有任何纯粹的.net解决方案。你可以看看面向方面的编程和交叉问题 - 可能有一个AOP解决方案(一些谷歌搜索将让你开始然后回到这里详细信息)。
然而,接下来的内容更多的是一个想法,而不是一个完整的解决方案,关于如何使用win32消息传递来实现这一点。
答案 2 :(得分:1)
另一个不涉及子类化的选项是向Form类型添加扩展方法。然后你可以调用你的扩展方法(类似于ShowAndWait())而不是show。如果你用不同的签名重载它,你甚至可能打电话给Show。