这可能是个愚蠢的问题,但我只是第一次启用 Option Strict,我不确定最好的方法是什么。
我有一堆动态创建的 PictureBox 控件,我在创建它们时添加事件处理程序来处理它们的绘制事件。在绘画事件中,我需要访问 PictureBox 的 ClientRectangle。请注意,我已将 sender As Object 更改为 sender As PictureBox:
Public Sub Example(sender As PictureBox, e As PaintEventArgs)
AlreadyExistingRectangle = sender.ClientRectangle
AlreadyExistingRectangle.Inflate(-2, -2)
' Draw stuff in AlreadyExistingRectangle
End Sub
出于各种原因我需要 AlreadyExistingRectangle(尽管我怀疑有更好的解决方案)。我使用 sender 作为 PictureBox 的原因是因为我的绘画事件有点慢,我认为它可能会加快速度,否则 sender.ClientRectangle 会导致延迟绑定(bind)。但是现在,缩小发生了,因为委托(delegate) sub 使用 sender 作为 Object。
那么,是否有一个简单的解决方案,或者我应该只允许后期绑定(bind)或缩小?如果是这样,哪个更快?
最佳答案
我认为最好是在将 sender
转换为 PictureBox
的 Paint
事件处理程序中创建一个变量。然后你可以将整个东西包装在 Try/Catch
block 中捕捉 DirectCast
的转换异常如果 sender
不是 PictureBox
则抛出。
Try
Dim senderPictureBox As PictureBox = DirectCast(sender, PictureBox)
'Do your stuff...
Catch ex As InvalidCastException
'Either do something here or just ignore the error.
End Try
或者,由于抛出异常对您来说已经是昂贵的,正如您所说的那样,代码很慢,您可以使用 TryCast
如果转换失败,它不会抛出异常,而是返回 Nothing
(这在性能方面要快得多)。
Dim senderPictureBox As PictureBox = TryCast(sender, PictureBox)
If senderPictureBox IsNot Nothing Then
'Do your stuff...
End If
关于vb.net - 如何防止缩小和后期绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307585/