allora... provo a spiegarmi così...
57736703LkQ.jpg
Per capirci...
Questa è il form principale
c'è una textbox dove si inserisce il nome di un candidato al colloquio
c'è alla destra c'è una combobox per stabilire le ore di partenza del colloquio (da 1 a 4)
c'è un ovalschape (pallino rosso) che è il pulsante di avvio del colloquio.
Da notare sotto la label indicante i 3600 secondi ancora da avviare.
Andando nella vista codice, il tutto è comandato dall'evento click sull'ovalshape.
nelle dichiarazioni delle variabili troviamo questi parametri... oltre ad altri che servono ad altro...
codice:
Public Class FormColloqui
Dim HH As Integer
Dim LineaNumero As Integer
Dim LineaPerPagina As Integer
Dim I_Avvio As Integer
Dim I_Conta As Integer
Dim Records As String = My.Computer.FileSystem.CurrentDirectory + "\Dati\Colloqui-del-" & Format(Now, "dd-MM-yyyy") & ".dat"
Dim Backup As String = ("C:\Dati_Colloqui_Backup") + "\Colloqui-del-" & Format(Now, "dd-MM-yyyy") & ".dat"
Dim Durata As Integer = 3600
Dim t1 As Integer = 3600 't1 corrisponde a 1 ora
Dim t2 As Integer = 7200 't2 corrisponde a 2 ore
Dim t3 As Integer = 10800 't3 corrisponde a 3 ore
Dim t4 As Integer = 14400 't4 corrisponde a 4 ore
Public contatore As Integer = 0
Evento click sul pallino
codice:
Private Sub OSSala1Posto1_Click(sender As System.Object, e As System.EventArgs) Handles OSSala1Posto1.Click
'evento click sul pallino ovalshape gestito da un select case
'le casistiche cambiano in base al colore del pallino
Select Case OSSala1Posto1.FillColor
'se il pallino è ROSSO
Case Color.Red
'verifica che sia inserito un nome nella textbox, in caso contrario
If TBSala1Posto1.Text = "" Then
'un messaggio avvisa che non ci sono nomi nella postazione
MsgBox("Nessun candidato è nella postazione 1.")
'esce dalla sub
Exit Sub
End If
'verifica che sia selezionata almeno una delle 4 opzioni di durata del colloquio
If CBSala1Posto1.Text = "" Then
'in caso contrario mostra messaggio di assenza ed esce dalla sub
MsgBox("Al candidato " & TBSala1Posto1.Text.ToUpper & " Non hai specificato la durata del colloquio.")
Exit Sub
'se tutto è ok allora...
Else
'colora il pallino di verde
OSSala1Posto1.FillColor = Color.Lime
'disabilita la textbox per non modificare o cancellare i dati
TBSala1Posto1.Enabled = False
'diabilita la combobox per non modificare o cancellare i dati
CBSala1Posto1.Enabled = False
'imposta la label "InizioS1P1" nel formato orario attuale nelle 24 ore.
InizioS1P1.Text = Format(Now, "HH:mm")
'avvia il Timer
TimerS1P1.Start()
End If
'se il pallino è GIALLO
Case Color.Yellow
'colora il pallino di ROSSO
OSSala1Posto1.FillColor = Color.Red
'resetta lo sfondo della textbox
TBSala1Posto1.BackColor = SystemColors.Window
'abilita la textbox
TBSala1Posto1.Enabled = True
'abilita la combobox
CBSala1Posto1.Enabled = True
'cancella il nominativo nella textbox
TBSala1Posto1.Text = ""
'cancella la durata dalla combobox
CBSala1Posto1.Text = ""
'resetta la label "inizio" colloquio
InizioS1P1.Text = "00.00"
'resetta la laber "fine" colloquio
FineS1P1.Text = "00.00"
'se il pallino è VERDE
Case Color.Lime
'rinomina la label2 nel FormScelta
FormScelta.Label2.Text = "S1P1"
'mostra il Form
FormScelta.ShowDialog()
'se il pallino è GRIGIO
Case Color.Gray
'Mostra messaggio ed esci dalla sub
MsgBox("Questa postazione è disabilitata")
Exit Sub
End Select
End Sub
Impostazione della Label del timer, cambia la label in base a quante ore l'utente dichiara di fare.
codice:
Public Sub CBSala1Posto1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles CBSala1Posto1.SelectedIndexChanged
'se è selezionato l'item 0, la label sarà rinominata con il t1 che corrisponde a "3600".
If CBSala1Posto1.SelectedIndex = "0" Then
LBTimerS1P1.Text = t1
End If
'se è selezionato l'item 1, la label sarà rinominata con il t2 che corrisponde a "7200".
If CBSala1Posto1.SelectedIndex = "1" Then
LBTimerS1P1.Text = t2
End If
'se è selezionato l'item 2, la label sarà rinominata con il t3 che corrisponde a "10800".
If CBSala1Posto1.SelectedIndex = "2" Then
LBTimerS1P1.Text = t3
End If
'se è selezionato l'item 3, la label sarà rinominata con il t4 che corrisponde a "14400".
If CBSala1Posto1.SelectedIndex = "3" Then
LBTimerS1P1.Text = t4
End If
End Sub
Gestione del Timer Tick
codice:
Private Sub TimerS1P1_Tick(sender As System.Object, e As System.EventArgs) Handles TimerS1P1.Tick
'ad ogni 1000 millisecondi, scala il numero della label di "1"
LBTimerS1P1.Text -= 1
'quando la label è uguale a "0"...
If LBTimerS1P1.Text = 0 Then
OSSala1Posto1.FillColor = Color.Yellow
TBSala1Posto1.BackColor = Color.Gold
TimerS1P1.Stop()
FineS1P1.Text = Format(Now, "HH:mm")
Notifica.Show()
contatore += 1
ListView1.Items.Add(contatore)
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(TBSala1Posto1.Text)
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add("1")
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add("1")
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(CBSala1Posto1.Text)
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(InizioS1P1.Text)
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(FineS1P1.Text)
ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(LBNote.Text)
LBNote.Text = "n.n."
End If
If File.Exists(Records) = False Then
Using CreaRecords As New StreamWriter(Records)
For CFR = 0 To ListView1.Items.Count - 1
CreaRecords.WriteLine(ListView1.Items(CFR).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(1).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(2).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(3).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(4).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(5).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(6).Text)
CreaRecords.WriteLine(ListView1.Items(CFR).SubItems(7).Text)
Next
CreaRecords.Close()
End Using
Else
Using CreaRecords As New StreamWriter(Records)
For CFR2 = 0 To ListView1.Items.Count - 1
CreaRecords.WriteLine(ListView1.Items(CFR2).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(1).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(2).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(3).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(4).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(5).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(6).Text)
CreaRecords.WriteLine(ListView1.Items(CFR2).SubItems(7).Text)
Next
CreaRecords.Close()
End Using
End If
If File.Exists(Backup) = False Then
Using CreaBackup As New StreamWriter(Backup)
For CFR = 0 To ListView1.Items.Count - 1
CreaBackup.WriteLine(ListView1.Items(CFR).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(1).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(2).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(3).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(4).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(5).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(6).Text)
CreaBackup.WriteLine(ListView1.Items(CFR).SubItems(7).Text)
Next
CreaBackup.Close()
End Using
Else
Using CreaBackup As New StreamWriter(Backup)
For CFR2 = 0 To ListView1.Items.Count - 1
CreaBackup.WriteLine(ListView1.Items(CFR2).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(1).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(2).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(3).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(4).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(5).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(6).Text)
CreaBackup.WriteLine(ListView1.Items(CFR2).SubItems(7).Text)
Next
CreaBackup.Close()
End Using
End If
End Sub