none
新手VB問題 RRS feed

  • 問題

  • 如題, 小弟是一介新手

    打算做一個棋盤遊戲

    棋盤打算用動態新增label來做

    但有一個很大的問題

    程式碼如下:

    Public Class Form1
        Private Sub form1_load(sender As Object, e As EventArgs) Handles MyBase.Load

            Dim lbArray(,) As Label = New Label(10, 10) {}
            Dim i As Integer = 0
            Dim j As Integer = 0

            For i = 0 To i = 10
                For j = 0 To j = 10
                    lbArray(i, j) = New Label()
                    Controls.Add(lbArray(i, j))
                    lbArray(i, j).Image = ImageList1.Images(0)
                    lbArray(i, j).Top = (j + 1) * 100
                    lbArray(i, j).Left = (i + 1) * 100
                    lbArray(i, j).Height = 100
                    lbArray(i, j).Width = 100

                    AddHandler lbArray(i, j).Click, AddressOf LB_Click

                    j += 1
                Next j
                i += 1
            Next i

        End Sub

        Private Sub LB_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim i% = 0
            If i = 0 Then
                DirectCast((sender), Label).Image = ImageList1.Images(1)
                i = 1
            ElseIf i = 1
                DirectCast((sender), Label).Image = ImageList1.Images(2)
                i = 0
            End If
        End Sub
    End Class

    運行結果就只有一張圖,

    而且只能按它一次,它就沒反應


    請各位大神指教指教.......





















    2016年1月27日 上午 04:54

解答

  • 您可以不要動態建立Label的方式, 請參考這個範例:Checkers

    • 已標示為解答 hugodragon 2016年1月28日 上午 07:44
    2016年1月27日 下午 02:24
  • 你的程式有2個大問題

    其一迴圈的參數

       For i = 0 To i = 10
                For j = 0 To j = 10
                     .....

                     j += 1
                Next j
                i += 1
            Next i

    其中的 For i=0 To i=10,只會執行1次,i=0這次。從我開始學習VB後,從沒看過有這種寫法,不知道你是從哪邊學來的,還是這是新版本的寫法呢(我使用VB2008)。建議改成

    For i=0 To 10

    For j=0 To 10

    另外,i和j不必再加1了,迴圈會自動幫你加1。如果你再加1,會變成i=0,2,4,6,8,10,只執行6次

    其二LB_Click事件的變數

    一開始設  Dim i% = 0

      所以If i = 0 Then這個判斷是永遠都執行這個部分,永遠不會執行Else

    那麼,設這個判斷是有什麼意義呢?

    • 已標示為解答 hugodragon 2016年1月28日 上午 07:44
    2016年1月28日 上午 02:05

所有回覆

  • 您可以不要動態建立Label的方式, 請參考這個範例:Checkers

    • 已標示為解答 hugodragon 2016年1月28日 上午 07:44
    2016年1月27日 下午 02:24
  • 你的程式有2個大問題

    其一迴圈的參數

       For i = 0 To i = 10
                For j = 0 To j = 10
                     .....

                     j += 1
                Next j
                i += 1
            Next i

    其中的 For i=0 To i=10,只會執行1次,i=0這次。從我開始學習VB後,從沒看過有這種寫法,不知道你是從哪邊學來的,還是這是新版本的寫法呢(我使用VB2008)。建議改成

    For i=0 To 10

    For j=0 To 10

    另外,i和j不必再加1了,迴圈會自動幫你加1。如果你再加1,會變成i=0,2,4,6,8,10,只執行6次

    其二LB_Click事件的變數

    一開始設  Dim i% = 0

      所以If i = 0 Then這個判斷是永遠都執行這個部分,永遠不會執行Else

    那麼,設這個判斷是有什麼意義呢?

    • 已標示為解答 hugodragon 2016年1月28日 上午 07:44
    2016年1月28日 上午 02:05
  • 謝謝, 小弟明白了
    2016年1月28日 上午 07:46