Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1

    [VB.NET] Eseguire funzioni su determinate directory indicate tramite CheckBox

    Ciao a tutti,
    Non so bene come spiegarmi ma ci provo...

    Io c'ho una funzione che elimina tutto i file in una specifica cartella quindi appunto contiene:
    codice:
    io.file.delete(path)
    Ovviamente non badate al codice che l'ho scritto al di fuori di una funzione!

    Ora c'ho (ad esempio 2) 2 checkbox:
    1 - File Temporanei - C:\Users\blabla...\Temp
    2 - File Temporanei Windows - C:\Windows\Temp

    Quindi ora ciò che voglio fare è far capire al programma quale directory pulire...
    Io ho pensato a 2 sistemi, ditemi voi quello corretto:
    1. Eseguire una specie di For Each che per ogni Checkbox presente nel formX (magari anche nel PanelX) checkata mi inserisce la determinate directory in una list*
    < Se non sbaglio si può fare!
    2. Ogni volta che checko una checkbox, questa mi inserisce e/o elimina la directory dalla list*


    * Per LIST intendo dim lista as new list(of io.directoryinfo)

    Cosa mi consigliate di fare? e cosa fareste al posto mio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da deamon75 Visualizza il messaggio
    Ciao a tutti,
    Non so bene come spiegarmi ma ci provo...

    Io c'ho una funzione che elimina tutto i file in una specifica cartella quindi appunto contiene:
    codice:
    io.file.delete(path)
    Ovviamente non badate al codice che l'ho scritto al di fuori di una funzione!

    Ora c'ho (ad esempio 2) 2 checkbox:
    1 - File Temporanei - C:\Users\blabla...\Temp
    2 - File Temporanei Windows - C:\Windows\Temp

    Quindi ora ciò che voglio fare è far capire al programma quale directory pulire...
    Io ho pensato a 2 sistemi, ditemi voi quello corretto:
    1. Eseguire una specie di For Each che per ogni Checkbox presente nel formX (magari anche nel PanelX) checkata mi inserisce la determinate directory in una list*
    < Se non sbaglio si può fare!
    2. Ogni volta che checko una checkbox, questa mi inserisce e/o elimina la directory dalla list*


    * Per LIST intendo dim lista as new list(of io.directoryinfo)

    Cosa mi consigliate di fare? e cosa fareste al posto mio?
    Ciao.
    Entrambi i metodi sono validi..
    Per il primo puoi fare un for each C as Control in Form.controls, verifichi con un if che l'oggetto C sia una checkbox, esegui il cast se C non espone la proprietà Checked, e poi cancelli i file che ti servono.
    Nel secondo caso invece, intercetti l'evento di click sulla checkbox e tieni una lista con i dati selezionati, aggiungendo o rimuovendo gli elementi di conseguenza..
    Prova: butta giù un po' di codice e vediamo..

  3. #3
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Ciao.
    Entrambi i metodi sono validi..
    Per il primo puoi fare un for each C as Control in Form.controls, verifichi con un if che l'oggetto C sia una checkbox, esegui il cast se C non espone la proprietà Checked, e poi cancelli i file che ti servono.
    Nel secondo caso invece, intercetti l'evento di click sulla checkbox e tieni una lista con i dati selezionati, aggiungendo o rimuovendo gli elementi di conseguenza..
    Prova: butta giù un po' di codice e vediamo..
    So come fare entrambi i modi, cioè ora ho provato col secondo, col primo non credo trovi difficoltà a scrivere il codice... Volevo appunto sapere qual è la soluzione più valida in termine di performance


    Il primo metodo dovrebbe essere qualcosa tipo:
    codice:
    For Each C As Control In Me.TabPage1.Controls
        If TypeOf C Is CheckBox Then
            If TryCast(C, CheckBox).Checked = True Then
                Message.Show(C.Name.ToString)
            End If
        End If
    Next
    E funziona, insomma mi restituisce solo i checked... ora invece del box devo mettere lista.add etc etc... mi consigli di utilizzare questa via?


    EDIT:
    In caso di questo metodo secondo me la cosa migliore è usare un select:
    codice:
    Select C.Name
    Case Is "Windows"
    lista.add("c:\windows")
    Case Is "Temp"
    lista.add("c:\user\temp")
    End Select
    Ovviamente non far caso a questo codice è solo un esempio, so che la sintassi è sbagliata
    Ultima modifica di deamon75; 02-12-2013 a 11:31

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da deamon75 Visualizza il messaggio
    So come fare entrambi i modi, cioè ora ho provato col secondo, col primo non credo trovi difficoltà a scrivere il codice... Volevo appunto sapere qual è la soluzione più valida in termine di performance


    Il primo metodo dovrebbe essere qualcosa tipo:
    codice:
    For Each C As Control In Me.TabPage1.Controls
        If TypeOf C Is CheckBox Then
            If TryCast(C, CheckBox).Checked = True Then
                Message.Show(C.Name.ToString)
            End If
        End If
    Next
    E funziona, insomma mi restituisce solo i checked... ora invece del box devo mettere lista.add etc etc... mi consigli di utilizzare questa via?


    EDIT:
    In caso di questo metodo secondo me la cosa migliore è usare un select:
    codice:
    Select C.Name
    Case Is "Windows"
    lista.add("c:\windows")
    Case Is "Temp"
    lista.add("c:\user\temp")
    End Select
    Ovviamente non far caso a questo codice è solo un esempio, so che la sintassi è sbagliata
    Infatti.. volevo ben dire che la sintassi non è quella
    Direi che se hai scritto il codice per la prima soluzione, usa quella. A livello di performance, non è certo il tuo codice a influire sulla velocità di esecuzione.. Semmai la funzione delete, ma quella devi usarla in ogni caso.
    Consiglio: salvati sulla proprietà tag delle checkbox il path completo, così ti eviti il select e la list. Per cancellare fai delete(cstr(C.tag)) dove C è il riferimento al tuo controllo generico, verificato che è checkbox e selezionato e hai fatto.
    Ultima modifica di renygade; 02-12-2013 a 11:40

  5. #5
    Quindi teorizzato diventa:
    1. Ciclo ogni controllo presente nel mio form (nel mio caso tabcontrol)
    2. Controllo se il "controllo" che sto processando è di tipo "CHECKBOX"
    3. Se è di tipo checkbox controllo se è "checked"
    4. Se tutto va a buon fine aggiungo la directory (contenuta nella proprietà del controllo checkbox) nella lista di directory




    in codice è:
    codice:
    For Each C As Control In Me.TabPage1.Controls
        If TypeOf C Is CheckBox Then
            If TryCast(C, CheckBox).Checked Then
                Lista.Add(New IO.DirectoryInfo(cstr(C.tag)))
            End If
        End If
    Next
    FunzioneSvuotaDirectory(Lista)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da deamon75 Visualizza il messaggio
    Quindi teorizzato diventa:
    1. Ciclo ogni controllo presente nel mio form (nel mio caso tabcontrol)
    2. Controllo se il "controllo" che sto processando è di tipo "CHECKBOX"
    3. Se è di tipo checkbox controllo se è "checked"
    4. Se tutto va a buon fine aggiungo la directory (contenuta nella proprietà del controllo checkbox) nella lista di directory




    in codice è:
    codice:
    For Each C As Control In Me.TabPage1.Controls
        If TypeOf C Is CheckBox Then
            If TryCast(C, CheckBox).Checked Then
                Lista.Add(New IO.DirectoryInfo(cstr(C.tag)))
            End If
        End If
    Next
    FunzioneSvuotaDirectory(Lista)
    Si. direi che la logica è corretta. Implementa l'algoritmo con il codice adeguato.
    Occhio con le funzioni per cancellare file.. Sicuramente serve un bel try Catch

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.