PictureBox dalam Array

Oke jadi saya punya dua masalah dengan kode ini:

  1. Saya memiliki 8 kotak gambar, saya mencoba menjalankan pemeriksaan pada nomor yang dibuat secara acak, untuk melihat apakah cocok dengan nomor di akhir kotak gambar (IE jika nomor acak = 8, konstanta lain dimasukkan ke dalam kotak gambar 8 dan tidak ada yang lain, tetapi hanya jika belum ada sesuatu di dalamnya).

    Saya telah melakukannya hanya dengan menjalankan setiap pemeriksaan sebagai satu pernyataan if tetapi... 180 pernyataan if nanti... itu terlalu banyak untuk dikodekan.

    Saya mencoba (seperti yang Anda lihat) menjalankannya melalui beberapa loop sementara. Bagian utama yang saya alami masalah adalah menetapkan kotak gambar tertentu dalam array dengan gambar dari array. Saya bisa mendapatkan gambar menggunakan imgName dan imgPictures(i) dalam format PictureBox1.Image = imgPictures(i), tetapi tidak mengganti PictureBox1.Image dengan picBoxes().Image.

  2. Menggunakan MsgBox yang saya tinggalkan di kode, loop dan pernyataan if menjalankan "Debug1" dan "Debug2" tetapi tidak ada yang lain... Mengapa demikian?

Saya akan meninggalkan kodenya dan melihat apa yang bisa kalian dapatkan.

Dim i As Integer = 1
Dim x As Integer = 1
Dim rndnumber As Integer = mathsclass.get_randomnumber()
Dim imgPictures(20) As Image
Dim picBoxes(8) As PictureBox
picBoxes = New PictureBox() {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6, PictureBox7, PictureBox8}
Dim imgName As String = ("_" & i)
imgPictures(0) = My.Resources.ResourceManager.GetObject(imgName)
picBoxes(x).Image = imgPictures(i)

While (i <= 20)
    MsgBox("Debug1")
    rndnumber = mathsclass.get_randomnumber()
    imgName = ("_" & i)
    imgPictures(i) = My.Resources.ResourceManager.GetObject(imgName)
    x = 0
    While (x < 8)
        MsgBox("Debug2")
        If ((randomnumber = i) & (randomposition = x)) Then
            MsgBox("Debug3")
            picBoxes(x).Image = imgPictures(i)
        Else
            While (rndnumber = randomnumber)
                MsgBox("Debug4")
                rndnumber = mathsclass.get_randomnumber()
            End While
            MsgBox("Debug5")
            If ((randomnumber <> rndnumber) & (randomposition <> x)) Then
                MsgBox("Debug6")
                imgName = ("_" & rndnumber)
                imgPictures(i) = My.Resources.ResourceManager.GetObject(imgName)
                picBoxes(x).Image = imgPictures(i)
            End If
            MsgBox("Debug7")
        End If
        MsgBox("Debug8")
        x += 1
    End While
    MsgBox("Debug9")
    i += 1
End While

person Breandán Fawcett    schedule 11.12.2014    source sumber
comment
Anda benar-benar harus lebih memahami bahasa apa yang Anda gunakan, tetapi saya memberi Anda +1 untuk pertanyaan menarik. Untuk VB6, men-debug kodenya mudah. Tekan saja F8 di IDE, dan Anda akan mulai menelusuri kodenya. Anda dapat menampilkan variabel, dan melihat apa yang sebenarnya terjadi.   -  person Kevin    schedule 13.12.2014


Jawaban (1)


Saya tidak begitu yakin bahasa apa yang Anda coba gunakan di sini. Maksudku, apakah itu VB.Net atau kelas VB6! Saya berasumsi itu adalah VisualBasic.Net (VB.Net).

Saya tidak yakin apakah saya memahami Anda dengan jelas. Jadi, saya memberi Anda contoh kode kecil untuk Anda coba. Saya yakin komentar di dalamnya cukup menjelaskan.

Pertama buat proyek kosong baru. Tambahkan 5 kotak teks di dalamnya (tidak perlu mengubah nama. Cukup drag dan drop 5 nomor kotak teks). Tambahkan Tombol lalu klik dua kali padanya dan tempelkan kode yang saya tunjukkan di bawah ini:

    Dim rand As New Random          '~~~ for creating the random numer
    Dim intTotal As Integer = 5     '~~~ I have 5 textboxes with the names ending by number from 1 to 5
    Dim intUpdated As Integer = 0   '~~~ to store the total number of updated textboxes

    '~~~ first of all we are looping through the textboxes(am just showing how you can fetch them via it's name. There are other ways to iterate through the controls though!)
    For i As Integer = 1 To intTotal
        Dim tbox As TextBox = DirectCast(Me.Controls.Item("TextBox" & i.ToString()), TextBox)   '~~~ here, we are fetching the TextBox via it's "Name" property, by appending the number at the end of "TextBox". Because in my form, I have "TextBox1", "TextBox2", "TextBox3", "TextBox4" and "TextBox5"

        tbox.Tag = "untouched"  '~~~ just setting it's "Tag" property to some text so that we could later use it evaluate whether we have touched this textbox via the random number

        '-------------------------------------------------
        'if you want to do something else like loading up default text or something, you can do it here too
        '-------------------------------------------------
    Next

    '~~~ the randomly choosing part..
    Dim j As Integer = 1
    Do While intUpdated < intTotal  '~~~ loop until we have taken into consideration all the textboxes via random number
        Dim r As Integer = rand.Next(1, intTotal + 1) '~~~ create a random number between 1 and 5 (both inclusive)

        '~~~ fetch that TextBox via it's name. Note that, am appending the random number to the name "TextBox". For eg, if the random number generated was "2", it would access "TextBox2"
        Dim tbox As TextBox = DirectCast(Me.Controls.Item("TextBox" & r.ToString()), TextBox)

        '~~~ since we have textbox now, we are checking whether we have accessed it earlier via random number
        If tbox.Tag.ToString() = "untouched" Then   '~~~ if not accessed before...
            tbox.Tag = "touched"    '~~~ mark the textbox as accessed via random number
            intUpdated += 1         '~~~ increment the counter variable that we are using for storing the number of textboxes we accessed

            '-------------------------------------------------
            '~~~ do whatever you want on it here.. Right now, am just inserting some text on it to show the order in which the textboxes are accessed via our random number
            tbox.Text = "updated" & j.ToString
            j += 1
            '-------------------------------------------------
        End If
    Loop

Setelah menjalankannya, saya harap Anda bisa mendapatkan idenya. Untuk mengakses nama kontrol yang berada di formulir Anda, Anda dapat mengaksesnya seperti ini: Me.Controls.Item("control_name_goes_here"). Jadi Anda bisa menambahkan nomor ke string saat Anda menyebutkan nama kontrol. Saya telah menggunakan ini dalam kode di atas. Lihat itu.

BTW, Anda menggunakan & yang ada di VB, akan bertindak seperti operator penggabungan! yaitu, Dim a As String = "Akhilesh" & "B Chandran". Ini akan menyimpan Akhilesh B Chandran dalam variabel itu a. Untuk operasi AND, Anda perlu menggunakan AND. Dalam C, C++, C#, dll adalah && (perhatikan bahwa ada dua karakter ampersand)

Selain itu, di VB.Net, Anda harus menggunakan MessageBox.Show() alih-alih fungsi MsgBox(). Itu cara yang lebih baik.

Semoga ini bisa membantu.

person Akhilesh B Chandran    schedule 12.12.2014