Visual Basic: Operacje na kontrolkach PictureBox


(adan2013) #1

Stworzyłem mapę z kontrolek PictureBox o wymiarach 12x15.

Każda kontrolka ma nazwę "w#k%". (#-liczka określająca wiersz, %-liczba określająca kolumnę)

Nie wiem jak wykonać funkcję która po podaniu numerów wiersza i kolumny umożliwiała by zmianę właściwości odpowiadającej

mu kontrolki PictureBox. Chodzi mi o coś takiego:

funkcja(1, 1).Image = ...

Czy jest możliwe coś takiego?


(kostek135) #2

Nie programuje w basicu, ale dziwnie próbujesz to zrobić. Nie lepiej byłoby zrobić tablice o dwóch wymiarach przechowujących referencje/wskaźniki na obiekty i wtedy napisać funkcję przyjmującą dwa inty (współrzędne) a zwracającą odniesienie do obiektu? W jakimś javopodobnym pseudokodzie byłoby to mniej-więcej tak:

Object[][] ref = new Object[3][3];


... {

ref[0][0] = ...

ref[0][1] = ...

...

}


public Object getRefByCoord(int x, int y) {

    return ref[x][y];

}

Ogólnie rzecz biorąc, nie uzależniałbym funkcjonalności kodu od nazwy (jeśli to możliwe), bo nazwa to String, a w nim łatwo o jakąś literówkę i debugowanie programu może potem trwać godzinami.


(somekind) #3

I po co w ogóle więcej niż jeden PictureBox? Na 99% coś takiego nie jest w ogóle potrzebne, bo nawet jeśli to ma być jakaś “szachownica”, to i tak lepiej operować na jednym obrazie, a potem go przypisać do jednego PictureBoxa.


(adan2013) #4

Zrobiłem tak jak podpowiedział mi użytkownik kostek135, lecz nie wiem jak zrobić że po kliknięciu na jakiś kwadrat uruchamiała mi się moja procedura,

która pobiera kordy kontrolki (indeksu z tablicy).

Nie do końca zrozumiałem pomysł somekind-a. Jeżeli to ma być mapa na której każdy kwadrat ma pokazywać co innego to ile trzeba by zrobić kombinacji,

żeby zapisać to w jednej kontrolce PictureBox…

Dla jasności umieszczam stworzony kod:

Public Class Form1

    Dim w As Byte = 0

    Dim k As Byte = 0

    Dim wys As Integer = 12

    Dim szer As Integer = 12

    Dim tablica(12, 12) As PictureBox

    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click

        For i As Byte = 1 To 144

            tablica(w, k) = New PictureBox()

            tablica(w, k).Image = My.Resources._10

            tablica(w, k).SizeMode = PictureBoxSizeMode.AutoSize

            tablica(w, k).Location = New System.Drawing.Point(szer, wys)

            Controls.Add(tablica(w, k))

            w = w + 1

            wys = wys + 40

            If w = 12 Then

                w = 0

                k = k + 1

                wys = 12

                szer = szer + 40

            End If

        Next

    End Sub

End Class