JavascriptProva

domenica 28 luglio 2013

Creazione e aggiunta di un controllo a runtime:

Creazione e aggiunta di un controllo a runtime:
Ecco il codice:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim testo As New TextBox
        testo.Text = "Ciao bello"
        Me.Controls.Add(testo)
    End Sub

Ed ecco il form:


La fonte

Esercizietto stupido ed elementare: una List di TextBoxes.

Bene.
Per il momento usiamo le List.

Ora faccio un esercizio, aggiungendo a una List degli oggetti.

Public Class Form1
    Dim elenco As New List(Of TextBox)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        elenco.Add(TextBox1)
        elenco.Add(TextBox2)
        elenco.Add(TextBox3)
        For Each elemento In elenco
            MsgBox(elemento.Name)
        Next
    End Sub
End Class
Ecco creata una lista di TextBoxes.

venerdì 26 luglio 2013

ArrayList e casting?

Bene.
Praticamente ogni elemento di un'ArrayList si "casta" da solo...
Sottoponendo a un'operazione ogni membro dell'arraylist esso risponde all'operazione adeguata.

Forse ci sono problemi per quanto riguarda gli oggetti...

mercoledì 17 luglio 2013

L'ArrayList, a differenza dell'Array, non è tipizzato!

Ecco, però l'ArrayList non è "tipizzato": è un minestrone in cui dentro ci può andare di tutto.
    Sub Main()
        Dim List As New ArrayList
        Dim carciofi As Integer = 12345
        Dim finocchi As Boolean = True
        List.Add("patate")
        List.Add(carciofi)
        List.Add(finocchi)
        For n = 0 To 2
            Console.WriteLine(List(n))
        Next
        Console.ReadKey()
    End Sub
patate
12345
True



Questo pone problemi di casting... che vedrò fra poco di capire.

Studio su come viene gestito il ridimensionamento dell'ArrayList a livello di Heap, in confronto con l'Array.

Veniamo ora all'usi di ArrayList.

Ecco il codice, simile a quello usato per gli array, che dimostra come un ArrayList, pur ridimensionandosi, resta sempre nella stessa locazione dello Heap, e dunque l'identificatore ha nello stack sempre il medesimo valore, ossia punta sempre nella medesima locazione, nonostante le modificazioni di lunghezza dell'arraylist.
    Sub Main()
        Dim List As New ArrayList
        Dim SecondaList As ArrayList
        SecondaList = List
        List.Add("uno")
        List.Add("due")
        List.Add("tre")
        Console.WriteLine(List(2))
        Console.WriteLine("La lunghezza della List è " & List.Count)
        Console.WriteLine("La proposizione secondo cui SecondaList si identifica con List è " & (SecondaList Is List))
        Console.ReadKey()
        List.Add("quattro")
        Console.WriteLine()
        Console.WriteLine(List(3))
        Console.WriteLine("La lunghezza della List è " & List.Count)
        Console.WriteLine("La proposizione secondo cui SecondaList si identifica con List è " & (SecondaList Is List))
        Console.ReadKey()
    End Sub
Ecco l'output:
tre
La lunghezza della List è 3
La proposizione secondo cui SecondaList si identifica con List è True

quattro
La lunghezza della List è 4
La proposizione secondo cui SecondaList si identifica con List è True



Molto chiaro!
Ecco dunque una differenza fondamentale fra array e ArrayList.

Studio su come vengono gestiti gli arrays ridimensionati in termini di creazione nello heap.

Che differenza c'è fra un array e un arraylist?
Bene, si possono usare le arraylist quando si devono ridimensionare arrays.
Infatti mi pare di ricordare che un array, quando viene ridimensionato, in realtà viene creato come nuovo array. Mi rifaccio il test che avevo ideato prima...

    Sub Main()
        Dim MyArray As String()
        Dim SecondoArray As String()
        MyArray = {"uno", "due", "tre"}
        SecondoArray = MyArray
        Console.WriteLine(MyArray(0))
        Console.WriteLine(SecondoArray Is MyArray)
        Console.ReadKey()
        ReDim Preserve MyArray(3)
        MyArray(3) = "quattro"
        Console.WriteLine(MyArray(3))
        Console.WriteLine(SecondoArray Is MyArray)
        Console.ReadKey()

    End Sub
Ecco l'output:
uno
True
quattro
False


Questo significa che dopo il ReDim Preserve viene scritto nell'Heap un nuovo array con una locazione diversa.

Ci aggiungo dell'altro codice per vedere invece se la variabile SecondoArray resta sempre quella di prima.
    Sub Main()
        Dim MyArray As String()
        Dim SecondoArray As String()
        MyArray = {"uno", "due", "tre"}
        SecondoArray = MyArray
        Console.WriteLine(MyArray(0))
        Console.WriteLine("la proposizione secondo cui SecondoArray si identifica con MyArray è " & (SecondoArray Is MyArray))
        Console.WriteLine("Lunghezza di MyArray " & MyArray.Length)
        Console.WriteLine("Lunghezza di SecondoArray " & SecondoArray.Length)
        Console.ReadKey()
        ReDim Preserve MyArray(3)
        MyArray(3) = "quattro"
        Console.WriteLine()
        Console.WriteLine(MyArray(3))
        Console.WriteLine("la proposizione secondo cui SecondoArray si identifica con MyArray è " & (SecondoArray Is MyArray))
        Console.WriteLine("Lunghezza di MyArray " & MyArray.Length)
        Console.WriteLine("Lunghezza di SecondoArray " & SecondoArray.Length)
        Console.ReadKey()

    End Sub
Ecco, ci ho aggiunto del codice più "esplicativo", che "parla un po' più chiaro":
uno
la proposizione secondo cui SecondoArray si identifica con MyArray è True
Lunghezza di MyArray 3
Lunghezza di SecondoArray 3

quattro
la proposizione secondo cui SecondoArray si identifica con MyArray è False
Lunghezza di MyArray 4
Lunghezza di SecondoArray 3


Dunque è chiaro che con il ReDim Preserve in realtà non si ridimensiona un bel niente, ma viene creato un nuovo array nello Heap, cui "punta" la variabile presente nello stack.

lunedì 15 luglio 2013

Programmazione di Tomb Raider...

Apro Level Editor.

Project -> Load -> maps/tut1/tut1.PRJ

Provo a fare output wad: mi si salva un file con estensione TOM in graphics/wad

Dimenticato di usare il convertitore di livelli!: apro tom2pc.exe

Costruisco il file con estensione .TR4.

Prova...

OKAY! Finalmente funziona!!!

La modifica è stata l'aggiunta di una cornice di pavimento con l'erba attorno alla piattaforma.