错误VB.NET索引越界

时间:2013-11-12 21:12:21

标签: vb.net

我在这里遇到一种情况。我有一个“索引超出范围”的错误,我不知道是什么原因造成的。我想这与标签有关。

通常标签代表一个数字。如果我将该数字除以列数,它会返回我单击的按钮行。如果我采用该标签的mod,它应该返回单击按钮的列。但有些事情是错的,我无法弄清楚是什么。我希望有人可以帮助我解决这个问题。提前谢谢。

Public Class Form1
    Dim AANTAL_KOLOMMEN As Integer = 8
    Dim AANTAL_RIJEN As Integer = 8
    Dim Button1 As Button
    Dim tel As Boolean
    Dim value1 As Integer
    Dim value2 As Integer
    Dim myButtons(AANTAL_RIJEN, AANTAL_KOLOMMEN) As Button



    Public Function zetNieuw(rij As Integer, kolom As Integer) As Button
        Dim nieuweKnop As New Button()
        nieuweKnop.Width = 40
        Me.Controls.Add(nieuweKnop)
        nieuweKnop.Name = "Btn_" & rij & "_" & kolom
        nieuweKnop.Left = kolom * nieuweKnop.Width
        nieuweKnop.Top = rij * nieuweKnop.Width
        nieuweKnop.Height = nieuweKnop.Width
        nieuweKnop.Text = ""
        AddHandler nieuweKnop.MouseDown, AddressOf Klik
        If rij = 3 And kolom = 3 Then
            nieuweKnop.BackColor = Color.Black
        End If
        If rij = 4 And kolom = 4 Then
            nieuweKnop.BackColor = Color.Black
        End If
        If rij = 3 And kolom = 4 Then
            nieuweKnop.BackColor = Color.White
        End If
        If rij = 4 And kolom = 3 Then
            nieuweKnop.BackColor =
                Color.White
        End If
        nieuweKnop.Tag = (kolom + (rij * AANTAL_KOLOMMEN))
        Return nieuweKnop


    End Function


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Me.value2 = 0 To AANTAL_RIJEN - 1 Step 1
            For Me.value1 = 0 To AANTAL_KOLOMMEN - 1 Step 1

                myButtons(value2, value1) = Me.zetNieuw(value2, value1)
            Next
        Next

    End Sub
    Private Sub Klik(sender As Object, e As MouseEventArgs)
        Dim knop As Button = sender
        Dim value As String = knop.Tag

        If myButtons(Tag / AANTAL_KOLOMMEN, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.Black Or myButtons((Tag / AANTAL_KOLOMMEN - 2), Tag Mod AANTAL_KOLOMMEN).BackColor = Color.Black Or myButtons((Tag / AANTAL_KOLOMMEN) - 2, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.Black Then
            knop.BackColor = Color.Black

        ElseIf myButtons(Tag / AANTAL_KOLOMMEN, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.White Or myButtons((Tag / AANTAL_KOLOMMEN - 2), Tag Mod AANTAL_KOLOMMEN).BackColor = Color.White Or myButtons((Tag / AANTAL_KOLOMMEN) - 2, (Tag Mod AANTAL_KOLOMMEN) - 2).BackColor = Color.White Then
            knop.BackColor = Color.Black
        End If



    End Sub




End Class

1 个答案:

答案 0 :(得分:1)

    If myButtons(Tag / AANTAL_KOLOMMEN, (Tag Mod AANTAL_KOLOMMEN) - 2) ...

使用Tag属性是非常糟糕的做法。只有这一个语句片段有3个错误:

  • 它随机索引错误的rij,因为它使用浮点除法,然后需要对其进行舍入以生成数组的索引。需要整数除法,\运算符

  • 它使用完全错误的Tag属性,其中一个形式而不是按钮

  • -2调整的原因很难弄清楚,但肯定会产生负值。这就是产生异常的原因。

避免这些错误需要一种截然不同的编程风格。当您将Option Strict On放在文件顶部并修复现在将获得的所有错误消息时,您将获得的那个。请注意,你会得到很多,它需要一段时间来排序。

并停止使用Tag属性。正确的面向对象方法是从Button派生自己的类,并添加rijkolom属性。你永远不会错的。

相关问题