Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 27

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    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
    Immagini allegate Immagini allegate
    Ultima modifica di e444; 05-01-2018 a 04:58

  2. #2
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    Ma se il pallino è VERDE mi deve aprire il Form di scelta per cosa voglio fare...
    Si apre quindi, come scritto nel codice questa finestra di dialogo...

    Screenshot_32.jpg

    l'utente, se deve estendere il colloqui, stabilisce prima di quanto cliccando su 1 dei 3 radio button.
    Nella vista codice ecco il tutto...

    codice:
    Public Class FormScelta
    
        Dim Est As Integer
        Dim StartTime As DateTime
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            'pulsante di chiusura del form
            Me.Close()
        End Sub
    
        Private Sub Scelta_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            'all'avvio del form i 3 radio button sono deselezionali e il pulsante di riferimento è disabilitato
            RB1ora.Checked = False
            RB2ore.Checked = False
            RB3ore.Checked = False
            BTNEstendi.Enabled = False
        End Sub
        Private Sub RB1ora_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB1ora.CheckedChanged
            'se l'utente fa click sul radio button 1 per estendere la durata di 1 ora, si abilita il pulsante "estendi"
            BTNEstendi.Enabled = True
        End Sub
    
        Private Sub RB2ore_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB2ore.CheckedChanged
            'se l'utente fa click sul radio button 2 per estendere la durata di 2 ore, si abilita il pulsante "estendi"
            BTNEstendi.Enabled = True
        End Sub
    
        Private Sub RB3ore_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB3ore.CheckedChanged
            'se l'utente fa click sul radio button 3 per estendere la durata di 3 ore, si abilita il pulsante "estendi"
            BTNEstendi.Enabled = True
        End Sub
        Private Sub BTNEstendi_Click(sender As System.Object, e As System.EventArgs) Handles BTNEstendi.Click
            'se l'utente ha selezionato il radio botton 1, Est = a 3600
            If RB1ora.Checked = True Then
                Est = 3600
            End If
            'se l'utente ha selezionato il radio botton 2, Est = a 7200
            If RB2ore.Checked = True Then
                Est = 7200
            End If
            'se l'utente ha selezionato il radio botton 3, Est = a 10800
            If RB3ore.Checked = True Then
                Est = 10800
            End If
    
            Select Case Label2.Text
                Case "S1P1"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P1.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto1.Text += 1
                    End If
                Case "S1P2"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P2.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto2.Text += 1
                    End If
                Case "S1P3"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P3.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto3.Text += 1
                    End If
            End Select
            Me.Close()
        End Sub
    
        Private Sub BTNInterrompi_Click(sender As System.Object, e As System.EventArgs) Handles BTNInterrompi.Click
            Note.ShowDialog()
            Select Case Label2.Text
                Case "S1P1"
                    FormColloqui.LBTimerS1P1.Text = "1"
                Case "S1P2"
                    FormColloqui.LBTimerS1P2.Text = "1"
                Case "S1P3"
                    FormColloqui.LBTimerS1P3.Text = "1"
                Case "S1P4"
                    FormColloqui.LBTimerS1P4.Text = "1"
                Case "S1P5"
                    FormColloqui.LBTimerS1P5.Text = "1"
                Case "S1P6"
                    FormColloqui.LBTimerS1P6.Text = "1"
                Case "S1P7"
                    FormColloqui.LBTimerS1P7.Text = "1"
                Case "S1P8"
                    FormColloqui.LBTimerS1P8.Text = "1"
                Case "S1P9"
                    FormColloqui.LBTimerS1P9.Text = "1"
                Case "S1P10"
                    FormColloqui.LBTimerS1P10.Text = "1"
            End Select
            Me.Close()
        End Sub
        End Class
    Onestamente non riesco a capire dove sia l'errore...

  3. #3
    Ok, ora si capisce qualcosa di più... permettimi iniziando con alcuni errori "di concetto":

    codice:
    PublicSubCBSala1Posto1_SelectedIndexChanged(sender AsObject, e AsSystem.EventArgs)HandlesCBSala1Posto1.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
            ElseIf CBSala1Posto1.SelectedIndex="1"Then
               'se è selezionato l'item 1, la label sarà rinominata con il t2 che corrisponde a "7200".                           LBTimerS1P1.Text= t2
           ...............
           ..............

    Se non usi ElseIf ti rileggi anche tutti gli If che non ti servono.

    codice:
    LBTimerS1P1.Text= t1

    evidentemente lavori senza aver abilitato "Option Strict = True"

    A mio parere uguagliare un testo ad un integer non è buona cosa... VB lo fa, ma l' errore potrebbe essere dietro l' angolo.

    codice:
    LBTimerS1P1.Text= t1.ToString

    E' possibile non mi sia ben svegliato (sono andato a letto alle 4 )... ma in tutto il codice che hai messo non vedo dove "modifichi" le label aggiungendo il tempo.

    Cmq una cosa così dovrebbe fungere:

    codice:
     Private Sub BTNEstendi_Click(sender As System.Object, e As System.EventArgs) Handles BTNEstendi.Click        
            'se l'utente ha selezionato il radio botton 1, Est = a 3600. 
            '................ MA EST SERVE VERAMENTE????
            If RB1ora.Checked = True Then
                FormPrincipale.LBTimerS1P2.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 3600).ToString
            ElseIf RB2ore.Checked = True Then
                FormPrincipale.LBTimerS1P2.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 7200).ToString
            ...............................
    
    Ultima modifica di eziogsv; 05-01-2018 a 17:39

  4. #4
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Ok, ora si capisce qualcosa di più... permettimi iniziando con alcuni errori "di concetto":

    codice:
    PublicSubCBSala1Posto1_SelectedIndexChanged(sender AsObject, e AsSystem.EventArgs)HandlesCBSala1Posto1.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
            ElseIf CBSala1Posto1.SelectedIndex="1"Then
               'se è selezionato l'item 1, la label sarà rinominata con il t2 che corrisponde a "7200".                           LBTimerS1P1.Text= t2
           ...............
           ..............

    Se non usi ElseIf ti rileggi anche tutti gli If che non ti servono.
    Ti rispondo passo passo...

    Si... avrei potuto usare l'ElseIf... ma, se ci pensi, potrei fare ancor meglio a convertirlo con un Select Case... e molto probabilmente farò così...
    codice:
    Public Sub CBSala1Posto1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles CBSala1Posto1.SelectedIndexChanged
    
            Select Case CBSala1Posto1.SelectedIndex
                Case 0
                    LBTimerS1P1.Text = t1
                Case 1
                    LBTimerS1P1.Text = t2
                Case 2
                    LBTimerS1P1.Text = t3
                Case 3
                    LBTimerS1P1.Text = t4
            End Select
    
    
        End Sub
    Forse è ancora meglio... o sbaglio?...

  5. #5
    Quote Originariamente inviata da e444 Visualizza il messaggio
    Ti rispondo passo passo...

    Si... avrei potuto usare l'ElseIf... ma, se ci pensi, potrei fare ancor meglio a convertirlo con un Select Case... e molto probabilmente farò così...
    [CUT]

    Forse è ancora meglio... o sbaglio?...
    Personalmente se possibile preferisco il SELECT al ELSEIF.... ma è una questione "estetica" di pulizia del codice: se fai reverse engineering del codice compilato vedi che il SELECT viene comunque "trasformato" dal compilatore in una serie di If... ElseIf...

    Riguardo al codice:
    codice:
            Select Case CBSala1Posto1.SelectedIndex
                Case 0
                    LBTimerS1P1.Text = t1
                Case 1
                    LBTimerS1P1.Text = t2
                Case 2
                    LBTimerS1P1.Text = t3
                Case 3
                    LBTimerS1P1.Text = t4
            End Select
    personalmente, onde evitare di creare 35.600 variabili, userei la variabile "Durata" che vedo che hai dichiarato (Dim Durata as Integer = 3600).

    codice:
            Select Case CBSala1Posto1.SelectedIndex
                Case 0
                    LBTimerS1P1.Text = Durata
                Case 1
                    LBTimerS1P1.Text = Durata * 2
                Case 2
                    LBTimerS1P1.Text = Durata * 3
                Case 3
                    LBTimerS1P1.Text = Durata * 4
            End Select
    che mi pare più pulito e meglio leggibile in futuro

  6. #6
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    Quote Originariamente inviata da eziogsv Visualizza il messaggio

    codice:
    LBTimerS1P1.Text= t1
    evidentemente lavori senza aver abilitato "Option Strict = True"

    A mio parere uguagliare un testo ad un integer non è buona cosa... VB lo fa, ma l' errore potrebbe essere dietro l' angolo.

    codice:
    LBTimerS1P1.Text= t1.ToString

    Perdonami ma questa non l'ho capita...

    Allora... partiamo dal primo suggerimento...
    "Option Strict = True"

    Nel mio manuale di Visual Basic Net, questo "parametro" non è proprio citato... che roba è??... a che serve e come funziona? se potessi essere così gentile da spiegarmelo posso così imparare un qualcosina in più...

    Poi scusa ma qui il tuo suggerimenti si contraddice...
    Ovvio che un testo non è da uguagliare ad un numero... infatti ho specificato che le variabili "t1; t2; t3; e t4" sono integer... e quindi me li deve considerare come "numerici"...

    codice:
    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
    Perche quindi mi suggerisci di convertire un parametro numerico a string??? ma se io scrivo questo:

    codice:
    LBTimerS1P1.Text= t1.ToString
    lui quel "3600" o chi che sia, me li converte in testo!... e non è peggio? o meglio... non rischio più facilmente ad imbattermi in un errore dal momento che gli chiedo di fare delle operazioni matematiche con quei "t1......"???

  7. #7
    Quote Originariamente inviata da e444 Visualizza il messaggio
    Perdonami ma questa non l'ho capita...

    Allora... partiamo dal primo suggerimento...
    "Option Strict = True"

    Nel mio manuale di Visual Basic Net, questo "parametro" non è proprio citato... che roba è??... a che serve e come funziona? se potessi essere così gentile da spiegarmelo posso così imparare un qualcosina in più...
    Option Strict = Opzione RIGOROSA: se abilitata ti COSTRINGE a scrivere codice corretto. Ad esempio non accetterebbe di eguagliare TESTO a NUMERI.

    L' opzione si abilita in "Progetto / Proprietà / Compilazione".

    Quote Originariamente inviata da e444 Visualizza il messaggio
    Poi scusa ma qui il tuo suggerimenti si contraddice...
    Ovvio che un testo non è da uguagliare ad un numero... infatti ho specificato che le variabili "t1; t2; t3; e t4" sono integer... e quindi me li deve considerare come "numerici"...

    Perche quindi mi suggerisci di convertire un parametro numerico a string??? ma se io scrivo questo:

    codice:
    LBTimerS1P1.Text= t1.ToString
    lui quel "3600" o chi che sia, me li converte in testo!... e non è peggio? o meglio... non rischio più facilmente ad imbattermi in un errore dal momento che gli chiedo di fare delle operazioni matematiche con quei "t1......"???
    Ti sfugge il particolare che il TESTO di una label è un parametro TEXT, mentre un numero è un parametro NUMERIC. Se uguagli un testo ad un numero VB.NET LO FA (nel senso che fa LUI la conversione che avresti dovuto fare TE), ma è una forzatura che Option Strict non ti consentirebbe, proprio perché in codice magari più complesso del semplice esempio in questione scrivere codice così potrebbe più facilmente portare ad errori.

    Tieni inoltre presente che scrivendo "t1.ToString" NON MODIFICHI IN NESSUN MODO T1, che ovviamente rimane una variabile Integer... semplicemente converti "momentaneamente" il suo valore in TEXT per poter inserire correttamente quel valore nella Label, che si aspetta un parametro TESTUALE.

    Adesso esco... il secondo post lo guardo nel pomeriggio.
    Ultima modifica di eziogsv; 06-01-2018 a 14:44

  8. #8
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    Quote Originariamente inviata da eziogsv Visualizza il messaggio

    E' possibile non mi sia ben svegliato (sono andato a letto alle 4 )... ma in tutto il codice che hai messo non vedo dove "modifichi" le label aggiungendo il tempo.
    Azz!.. ed io che mi reputo un animale notturno!... vedo che c'è chi mi batte!!... ahahahaha a dire il vero ci passo le nottate a lavorare al pc perche di notte riesco a concentrarmi meglio... nel pieno silenzio... lavoro meglio...

    Mi hai riportato il codice di quello che dici di non aver visto??? ahahahahah... e si.... avevi sonno!.. ahahahah

    Allora...
    "Est" (che non è altro che l'abbreviazione di "estendi") assolutamente serve si... perche?... perche appunto è un valore "variabile" che può cambiare in base a cosa decide l'utente.... se non creassi questa variabile ti mostro cosa uscirebbe fuori... ma prima, ti faccio una piccola osservazione...
    Hai notato quel: S1P2 che hai riportato nel codice?... quelle... non sono lettere e numeri a caso...
    S1 = Salone 1
    P2 = Poltrona 2
    In tutto... ci sono 4 saloni e ogni salone ha 10 poltrone... e tutte devono essere indipendenti.
    Se non avessi la variabile "Est", dovrei scrivere il codice del pulsante "Estendi" (chiamato nel programma "BTNEstendi") in questo modo:


    codice:
    Select Case Label2.Text
                Case "S1P1"
                        If RB1ora.Checked = True Then
                                  FormColloqui.LBTimerS1P1.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 3600).ToString
                                  FormColloqui.CBSala1Posto1.Text += 1
                        ElseIf RB2ore.Checked = True Then
                                  FormColloqui.LBTimerS1P1.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 7200).ToString
                                  FormColloqui.CBSala1Posto1.Text += 1
                        ElseIf RB3ore.Checked = True Then
                                  FormColloqui.LBTimerS1P1.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 10800).ToString
                                  FormColloqui.CBSala1Posto1.Text += 1
                        End If
                Case "S1P2"
                        If RB1ora.Checked = True Then
                                  FormColloqui.LBTimerS1P2.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 3600).ToString
                                  FormColloqui.CBSala1Posto2.Text += 1
                        ElseIf RB2ore.Checked = True Then
                                  FormColloqui.LBTimerS1P2.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 7200).ToString
                                  FormColloqui.CBSala1Posto2.Text += 1
                        ElseIf RB3ore.Checked = True Then
                                  FormColloqui.LBTimerS1P2.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 10800).ToString
                                  FormColloqui.CBSala1Posto2.Text += 1
                        End If
                Case "S1P3"
                        If RB1ora.Checked = True Then
                                  FormColloqui.LBTimerS1P3.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 3600).ToString
                                  FormColloqui.CBSala1Posto3.Text += 1
                        ElseIf RB2ore.Checked = True Then
                                  FormColloqui.LBTimerS1P3.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 7200).ToString
                                  FormColloqui.CBSala1Posto3.Text += 1
                        ElseIf RB3ore.Checked = True Then
                                  FormColloqui.LBTimerS1P3.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 10800).ToString
                                  FormColloqui.CBSala1Posto3.Text += 1
                        End If
                Case "S1P4"
                        If RB1ora.Checked = True Then
                                  FormColloqui.LBTimerS1P4.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 3600).ToString
                                  FormColloqui.CBSala1Posto4.Text += 1
                        ElseIf RB2ore.Checked = True Then
                                  FormColloqui.LBTimerS1P4.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 7200).ToString
                                  FormColloqui.CBSala1Posto4.Text += 1
                        ElseIf RB3ore.Checked = True Then
                                  FormColloqui.LBTimerS1P4.Text=(Cint(FormPrincipale.LBTimerS1P2.Text) + 10800).ToString
                                  FormColloqui.CBSala1Posto4.Text += 1
                        End If
    
    ecc... ecc... ecc...
    


    Io, invece di scrivere tutto sto casino, ho pensato che era più semplice e veloce per il programma, se non più leggero, ragionare in questo modo:

    codice:
    Private Sub BTNEstendi_Click(sender As System.Object, e As System.EventArgs) Handles BTNEstendi.Click
           
            If RB1ora.Checked = True Then
                Est = 3600
            End If
            If RB2ore.Checked = True Then
                Est = 7200
            End If
            If RB3ore.Checked = True Then
                Est = 10800
            End If
    
    
            Select Case Label2.Text
                Case "S1P1"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P1.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto1.Text += 1
                    End If
                Case "S1P2"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P2.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto2.Text += 1
                    End If
                Case "S1P3"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P3.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto3.Text += 1
                    End If
                Case "S1P4"
                    If MsgBox("ATTENZIONE!, stai estendendo la durata del colloquio!... CONFERMI?", MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes Then
                        FormColloqui.LBTimerS1P4.Text += Val(Est) - (Now - StartTime).TotalSeconds
                        FormColloqui.CBSala1Posto4.Text += 1
                    End If
    
    
    ecc... ecc... ecc...

    Ho riportato SOLO le prime 4 postazioni del salone 1!.... ne mancano altre 46 di postazioni... che ovviamente evito qui di trascrivere...
    Che succede come ho fatto io?
    Il programma crea questa variabile di nome "Est" e sa che è un valore numerico che cambia in base al radio botton scelto dall'utente.... poi...
    In primis il programma mi chiede la conferma se voglio estendere la durata... cosa che potrebbe tornare utile in caso di "click accidentali"... (purtroppo devo pensare pure a questo!...)
    Perche ho usato poi il "Select Case"?... perche essendoci 50 postazioni, devo in qualche modo dire al programma a QUALE di quelle 50 postazioni deve estendere la durata!...

    Quando l'utente fa click sul pallino VERDE del FormColloqui, per esempio, sulla postazione 5 del salone 3, il programma, prima di aprire l'apposita finestra per la scelta (FormScelta), modifica la proprietà text della "Label2" del FormScelta scrivendo "S3P5".
    Si apre poi il FormScelta.
    L'utente seleziona il radio botton 1, 2 o 3 per dire al programma se vuole estende di 1 ora, 2 ore o 3 ore e poi clicca sul bottone "Estendi".
    Quando poi l'utente ha fatto click sul bottone "Estendi" il programma legge la proprietà text della label2 del medesimo form e comincia ad andare in rassegna dei casi con il Select Case.
    Inizia comparando il testo della label2, che è diventato: "S3P5" con...
    Case S1P1, no...
    Case S1P2, no...
    Case S1P3, no...

    ecc... ecc...

    Case S1P9, no...
    Case S1P10, no...
    Case S2P1, no...
    Case S2P2, no...

    ecc... ecc...

    Case S3P3, no...
    Case S3P4, no...
    Case S3P5, BINGO!.... e così capisce che l'estensione della durata è riferito al Salone 3, Poltrona 5.

  9. #9
    anche in timer:

    codice:
    PrivateSubTimerS1P1_Tick(sender AsSystem.Object, e AsSystem.EventArgs)HandlesTimerS1P1.Tick
            'ad ogni 1000 millisecondi, scala il numero della label di "1"
             LBTimerS1P1.Text = (Cint(LBTimerS1P1.Text) - 1).ToString
    
    
    abituati a lavorare con Option Strict = True... non te ne fa passare nemmeno una, ma limiti le probabilità di errore.
    Ultima modifica di eziogsv; 05-01-2018 a 17:36

  10. #10
    Torniamo "a bomba" e riparliamo del problema n° 1, cioè che quando vai a sommare "Est" i conti non ti tornano.

    codice:
    FormColloqui.LBTimerS1P1.Text+=Val(Est)-(Now-StartTime).TotalSeconds
    (Now - StartTime).TotalSeconds lo ho suggerito quando credevo che il tempo andasse "avanti", ma se va indietro non mi pare che serva.

    NOTA: Val(ESt) non ha senso, visto che Est è già un valore numerico. Inoltre come già detto aggiungere Numeri a testo non è il massimo della correttezza.

    codice:
    LBTimerS1P1.Text=(Cint(FormPrincipale.LBTimerS1P2.Text)+Est).ToString
    Non hai precisato se usando questo codice finalmente il problema di partenza (cioè aggiungere correttamente Est al valore corrente della label) è risolto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.