vb.net - 如何防止缩小和后期绑定(bind)?

标签 vb.net

这可能是个愚蠢的问题,但我只是第一次启用 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 转换为 PictureBoxPaint 事件处理程序中创建一个变量。然后你可以将整个东西包装在 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/

相关文章:

vb.net - 为什么一个又一个: UBound or Length

vb.net - Visual Basic : picuter border on a button. 怎么办?

vb.net - 如何在 Process.Start 中的两个进程之间使用管道

vb.net - 如何在 VB.net 中创建高质量图标

vb.net - VB.NET lambda 表达式示例

vb.net - 在VB 2013中,有没有办法区分键盘输入和扫描仪输入?

javascript - VB 2010 中等效的 JS eventListener

JSON中单个字符串的JSON反序列化

vb.net - 数据绑定(bind)未反射(reflect)在集合中

python - 发送到 Citrix 应用程序时在 Python 脚本中模拟硬件按键(SendKeys 不起作用)