这可能是一个愚蠢的问题,但是我只是第一次启用Option Strict,我不确定这里最好的方法是什么。
我有一堆动态创建的PictureBox控件,并且在创建它们以处理其绘画事件时添加了事件处理程序。在绘画事件中,我需要访问PictureBox的ClientRectangle。请注意,我已将发件人作为对象更改为发件人为图片框:
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否则会导致后期绑定。但是现在,缩小发生了,因为委托子将sender用作Object。
因此,是否有一个简单的解决方案,还是我应该允许后期装订或缩小?如果是这样,哪个更快?
最佳答案
我认为最好在Paint
事件处理程序中创建一个变量,然后将sender
转换为PictureBox
。然后,您可以将整个内容包装在 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 - 如何防止缩小和后期装订?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40307585/