这可能是一个愚蠢的问题,但我第一次启用了Option Strict,我不确定这里的最佳方法是什么。
我有一堆动态创建的PictureBox控件,我在创建它们时会添加事件处理程序来处理它们的绘制事件。在paint事件中,我需要访问PictureBox的ClientRectangle。请注意,我已将发件人作为对象更改为发件人作为PictureBox :
Public Sub Example(sender As PictureBox, e As PaintEventArgs)
AlreadyExistingRectangle = sender.ClientRectangle
AlreadyExistingRectangle.Inflate(-2, -2)
' Draw stuff in AlreadyExistingRectangle
End Sub
我出于各种原因需要AlreadyExistingRectangle(虽然我怀疑有更好的解决方案)。我使用发件人作为PictureBox 的原因是因为我的绘制事件有点慢,我认为它可能加快速度,因为sender.ClientRectangle会导致后期绑定。但现在,缩小发生,因为委托子使用发送者作为对象。
那么,有一个简单的解决方案,还是应该允许后期绑定或缩小?如果是这样,哪个更快?
答案 0 :(得分:1)
我认为如果您在Paint
事件处理程序中创建了一个变量,并将sender
强制转换为PictureBox
,那么它最好。然后,您可以将整个事件包装在scala.collection.immutable.List
中,以捕获sender
不是 PictureBox
时Try/Catch
block抛出的强制转换异常。
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
或者,因为抛出异常对你已经很费用,正如你所说的那样,代码速度慢,你可以使用DirectCast
而不是抛出异常,如果强制转换失败则只返回Nothing
(这是性能要快得多。
Dim senderPictureBox As PictureBox = TryCast(sender, PictureBox)
If senderPictureBox IsNot Nothing Then
'Do your stuff...
End If