这可能是一个愚蠢的问题,但是我只是第一次启用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/

10-13 09:29