definizione vettore:
Private ButtonMedia As New Button[]
Private Selezionato As Integer
Aggiunta pulsante:
Public Sub Button_AddMedia_Click()
Dim BT As Button
Dim DurataInSecondi As Integer
Dim Fine As Date
If FileChooser_Media.SelectedPath = "" Then Return
CheckBox_Saved.Value = False 'indico al software che la playlist e' stata modificata e e' da salvare
Label_end_time.Hide
ScrollView_TimeLine.Arrangement = 0 '0 = none
With BT = New Button(ScrollView_TimeLine) As "Tasto"
.Text = File.Name(FileChooser_Media.SelectedPath)
.Tooltip = FileChooser_Media.SelectedPath
If ButtonMedia.Count = 0 Then
.Top = Label_start_time.Top + Label_start_time.Height + 1 'ma come e' che sembra vadano una dopo l'altra anche se non ho inserito il codice opportuno?
Else
.Top = ButtonMedia[Indice - 1].Top + ButtonMedia[indice - 1].Height
Endif
.Left = Label_start_time.Left - 5
.Font.Size = Me.Font.Size - 3
.Width = Label_start_time.Width + 10
.Border = 1
DurataInSecondi = LenghtFromFile(FileChooser_Media.SelectedPath)
'.Height = (DurataInSecondi / 86400) * ScrollView_TimeLine.Height
.Height = Max(DurataInSecondi / zoom, 16)
.Tag = DurataInSecondi
End With
ButtonMedia.Add(BT)
Inc Indice
'e sposta la label di fine programmazione in coda a questo ultimo evento ... aggiornando il display della fine
Label_end_time.Top = ButtonMedia[indice - 1].Top + ButtonMedia[Indice - 1].Height + 1
Label_end_time.Text = DateAdd(Label_end_time.Tag, gb.Second, DurataInSecondi) 'mhhh se sommi con la fine oltre la mezzanotte da' errore!!!!!
If Not (Label_end_time.Text Like "[0-2][0-9]:[0-5][0-9]:[0-5][0-9]") Then
'se c'e' un errore probabilemnte e' perche'ì con questo video si scavalla la mezzanotte! Questo e' L'ULTIMO video che si puo' inserire per questa giornata!!!!
Fine = (DateAdd(DateChooser_Giornata.Value, gb.Day, 1))
Label_end_time.Text = Day(Fine) & "-" & Month(fine) & "-" & Year(fine)
Label_end_time.Background = Color.Red
Label_end_time.Show
Button_AddMedia.Enabled = False
Else
Label_end_time.Background = Color.LightForeground
Label_end_time.Show
Endif
Label_end_time.Tag = Label_end_time.Text
'SALVA l'ultima cartella aperta come default per la prossima esecuzione
Settings["FileChooser/LastFolder"] = FileChooser_Media.SelectedPath
End
questo il codice dell'eliminazione del pulsante:
Public Sub Button_Remove_Click()
Dim risultato As Integer
risultato = Message.Question("Vuoi veramente eliminare " & ButtonMedia[Selezionato].Text & " dalla playlist?", "si", "no", "cancel")
If risultato <> 1 Then Return
ButtonMedia[Selezionato].Delete
ButtonMedia.Resize(ButtonMedia.Count - 1) 'ho qualche dubbio su questo .. non e' che dal vettore 1 2 3 eliminando il 2 mi ritorna 1 2 invece che 1 3 ?
Selezionato = ButtonMedia.Find(Last)
Dec indice
End
codice che NON funziona se viene eliminato il bottone da codice:
Public Sub Tasto_Click()
Dim I As Integer
Dim BT As Button
Selezionato = ButtonMedia.Find(Last)
For Each bt In ButtonMedia
bt.Font.Bold = False '--------------- qui' mi da' invalid object !!!!!
Next
' For i = 0 To ButtonMedia.Count - 1
' ButtonMedia[i].Font.Bold = False
' Next
ButtonMedia[Selezionato].Font.Bold = True
End
PS: il codice funziona bene se non ci sono eliminazioni ma solo aggiunte al vettore
.........
Usando il metodo .Delete tu distruggi l'oggetto presente nell'elemento del vettore, e pur utilizzando il metodo .Resize() non ripristini la presenza di un contenuto nell'indice, in cui è stato distrutto l'oggetto di tipo Button, né elimini l'elemento ormai svuotato del Button.
Suggerirei di utilizzare il metodo .Remove() della Classe Button congiuntamente con il metodo .Delete per cancellare dal contenitore il Button precedentemente creato:
......
ButtonMedia[Selezionato].Delete()
ButtonMedia.Remove(Selezionato)
......