Besoin d'aide application vb

[Résolu/Fermé]
Signaler
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
-
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
-
Bonjour,

J'aimerais un peu d'aide car ne trouvant pas ce que je cherche sur google, je me suis tourné vers ce forum.

J'aimerais créer une application visual basic pour permettre le lancement d'une application via une listbox. Celle-ci qui aurais préalablement lister des programme en .exe d'un dossier spécifié et lorsque je sélectionne le programme dans la listbox et que je clic sur le bouton assigné pour lancer mon application cela me lance n'importe quelle programme qui est listé dans la listbox et que j'aurais au préalable sélectionné. Cela m'évitera de créer une centaine de boutons pour lancer mes programmes, et de les assigner au bon programme.

Je programme non pas avec visual basic express mais avec sharpdevelop 4.4 (plus facile pour publier le programme sans être embêter avec le click once)

Je précise que je suis novice dedans et que je ne connais que quelques codes et variables tel que if, then, else ou Hide, Close, Clear, Show, Hide.

19 réponses

Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
20
Salut,

Je ne connais pas sharpdevelop, j'utilise visual studio, mais je suppose que ca doit être à peu près similaire, donc je te dis comment j'ai fais pour celui-ci.

Je viens de modifier un code que j'ai fais il y a quelques temps pour toi.

Je n'ai pas tout compris comment tu voulais lister tous les programmes d'un dossier, donne moi plus d'info et je te répondrai.

Pour le code que j'ai modifié, crée un nouveau projet et ajoute une ListBox nommée "ListBox1" et trois boutons nommés "Button1", "Button2" et "Button3"

Le premier bouton va te servir à ouvrir l'application désirée, le deuxième à supprimer un élément sélectionné de la liste, et le troisième à ouvrir l'application séléctioné dans la liste.

Va dans les propriétés de ton application et clique sur settings. Ajoute une valeur nommé "SaveList" de type ArrayList (ArrayList se situe dans mscorlib > System.Collection > ArrayList). Ajoute une autre variable de type Boolean nommée Start qui a comme valeur par défaut False.

Ensuite, retourne sur ton application, et colle ce code dans ton application :

Public Class Form1
    Dim List As New ArrayList()

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        If My.Settings.Start = True Then
            If Not My.Settings.SaveList Is Nothing Then
                List = My.Settings.SaveList
                ListBox1.Items.AddRange(List.ToArray)
            End If
        Else
            My.Settings.Start = True
            My.Settings.Save()
        End If
    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As EventArgs) Handles Me.FormClosing
        My.Settings.SaveList = List
        My.Settings.Save()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim SFD As New OpenFileDialog
        SFD.Filter = "Application|*.exe|Tous les fichiers|*.*"
        SFD.Title = "Choississez l'application que vous souhaitez ajouter à la liste."
        SFD.FileName = ""
        If SFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            ListBox1.Items.Add(SFD.FileName)
            List.Add(SFD.FileName)
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
            List.Remove(ListBox1.SelectedItem)
        Catch
            If ListBox1.SelectedIndex = False Then
                MsgBox("Vous n'avez pas selectionner d'item.", MsgBoxStyle.Critical, "Erreur")
            End If
        End Try
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Try
            Shell(ListBox1.SelectedItem)
        Catch
            If ListBox1.SelectedIndex = False Then
                MsgBox("Vous n'avez pas selectionner d'item.", MsgBoxStyle.Critical, "Erreur")
            End If
        End Try
    End Sub
End Class


Voilà.

En espérant t'avoir aidé,

hcp7kuz
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Après je ne sais pas si cela se fais avec la liste box mais vu q'uon peux sélectionner un élément dedans je me suis dit que c'était avec cet outil qu'il fallait le faire.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Et chaque fois que le programme s'ouvre il actualise la liste box comme sa quand j'ajoute un programme portable ou raccourcis dans le dossier des programme cela l'ajoute automatiquement sans intervention ou besoin de recompiler le programme.
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
20
Je n'ai pas compris comment est-ce que tu compte lister les prgrammes.
Tous les programmes se situes dans le dossier C:\Program ? Ou bien ce sont des raccourci mis dans un dossier spéciales ?
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Non enfaite ce sont des programmes portables, des programmes qui ne nécessitent pas d'installation.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
un simple programme .exe
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
20
Salut,

Je pense avoir trouver ce que tu cherche.

Créer un nouveau projet avec une ListBox nommée ListBox1 et un bouton nommé Button1.

Va dans le code de ton application et colle ce code :

Public Class Form1

    Dim EmplacementDossier As String = "C:\"

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(EmplacementDossier)
        For Each fi As System.IO.FileInfo In di.GetFiles
            ListBox1.Items.Add(fi.FullName)
        Next
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Shell(ListBox1.SelectedItem)
        Catch
            If ListBox1.SelectedIndex = False Then
                MsgBox("Vous n'avez pas selectionné d'item.", MsgBoxStyle.Critical, "Erreur")
            End If
        End Try
    End Sub
End Class



Il ne te reste plus qu'a modifier la variable "EmplacementDossier" afin de faire la liste du dossier que tu veux.

Après, dans ton application, séléctionne un élément de la liste et démarre le en cliquant sur le bouton.

En espérant t'avoir aidé,

hcp7kuz
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Sa fonctionne :), mais des avertissement sur mon programme es normal?


Voici le lien de la capture : http://hpics.li/388550e

PS : j'ai aussi un bogue, le nom des programme s'affiche 2 fois (sa fais 2 bloc alphabétique).
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
20
Tu as juste déclaré la variable EmplacementDossier comme Objet et non comme String, remplace la ligne
dim EmplacementDossier as Object = "C:\Users\meterio\Desktop\data"
par
dim EmplacementDossier as String = "C:\Users\meterio\Desktop\data"
.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
d'accord, et j'aimerais aussi intégrer au programme un système de comptage pour dire quel programme à été lancé et ce sera sauvegardé dans un fichier annexe mais la je n'ai aucune idée pour faire cela. Mon idée est de changer la couleur de la ligne dans la listebox ou changer la couleur de la police de caractère pour dire quel programme à été lancé. Pouvez-vous m'aider pour cela?
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
20
Je pense que mettre en couleur un élément d'une listbox s'avère compliquer.
Je fais des recherches et je te tiens au courant.
Il serait plus facile de faire une autre ListBox contenant les items récement utilisé, ou de trier les items du plus utilisé au moins utilisé.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Daccord, et es possible que le programme crée un fichier txt ou xml ou autre extension, qui permet de restaurer le comptage des programme (avec une autre listbox comme tu le disais), quand on a fermer le programme et avoir un bouton pour mettre à blanc le fichier ou simplement l’effacer si le programme en re-crée un autre.

Encore merci pour ton aide :)
Messages postés
16265
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 septembre 2021
733
Bonjour

@hcp7kuz, tu utilises des fonctions VB6 dans ton code.
Ça n'est pas forcément conseillé.
Cet article donne quelques pistes pour éviter ça
https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net

@Tous les 2, vous êtes partis du principe que la listBox est la référence, la base de données.
Cette méthode, même si elle marche, n'est pas la bonne.
Comme tu veux faire un xml pour
qui permet de restaurer le comptage des programme
, il va te falloir transférer les données dans un autre "conteneur" compatible de l'export vers le xml.
Ça fait des boucles dans tous les sens et c'est "long" car les accès aux contrôles modifient l'affichage.

Pour s'affranchir de tout ça, il existe le binding, ici un exemple avec une List(Of).
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource

Et ça tombe bien, car les List(Of) sont compatibles des différentes méthodes de serialisation xml, ma préférée étant Linq To Xml
https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net

Je n'ai pas le temps aujourd'hui de vous faire un code d'exemple, mais je vous propose un principe.

Une classe avec le chemin du programme et un boolean qui vaut true quand le programme a été lancé.
Une liste de cette classe, bindée sur un datagridview (il y aura une case cochée quand le programme sera lancé), il existe aussi une checkListBox mais le binding dans ce cas n'est pas pratique. Et si tu veux de la couleur, c'est assez simple avec un datagridview.
Tu pourras directement serialiser ta List et même faire une requête Linq toute simple pour compter le nombre d'instances cochées.

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
20
Bonjour,

Je ne suis pas un expert en vb.net, et je me débrouille comme je peux.

J'ai regarder les articles que tu m'as envoyé Whismeril, mais je n'ai pas compris les notions sur les différentes listes, et je ne vois pas où sont les fonctions vb6 dans mon code.

Materio, toujours sur le même concept qu'auparavant (ou tu voulais mettre en valeur un élément exécuté), je propose de déplacer l'item au début de la liste lorsqu'on l'exécute, rajoute juste ces deux lignes après le "
Try
" :

ListBox1.Items.Insert(0, ListBox1.Items.Item(ListBox1.SelectedIndex))
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)


Autrement, tu voulais sauvegarder ta liste ? Et pour le fichier annexe, tu voulais faire une liste des programmes exécutés ?
Messages postés
16265
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 septembre 2021
733 >
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019

Shell, msgbox, etc.. n'existent pas en Vb.net
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
oui genre un XML ou même un txt qui sauvegarde quel programme a été lancé et un bouton dans le programme servira à vider le fichier txt ou le supprimer si le programme le re-crée.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
@whismeril je me doutais que la listebox pouvait servir à ça mais n'étant pas forcément adapté. Mais ce que je veux faire c'est juste un petit programme donc même si sa fais des boucle partout, c'est pas si grave car j'ai regardé les liens que tu as donné et étant novice je n'y ai rien compris. Donc j'aurais préférer faire quelque chose de simple.
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Bonjour à tous,

Pour faire ce que tu demandes, il vaut mieux utiliser une Listview:
1 colonne pour les appli et une autre pour le compteur.
Mettre une Listview et 2 Buttons
Le bouton 1 sert à lancer les applis et le 2 ne sert qu'une fois pour enregistrer ton répertoire d'EXE dans un fichier texte de sauvegarde. Tu peux le rendre inactif ensuite.
A l'ouverture création du fichier texte et fermeture automatique du programme. Ensuite tu ouvres le programme et tu ouvres le répertoire d'EXE.
Voici le code:

Option Strict On
Imports System.IO
Public Class Form1
#Region "Declaration"
    Dim ligne, compteur As Integer
    Dim cheminexe As String = "C:\chemin desEXE" 'chemin des EXE 'a adapter
    Dim chemin As String = Application.StartupPath & "\sauvegarde.txt"
    Dim nom As String
#End Region
#Region "Ouverture et fermeture"
    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Try
            If File.Exists("sauvegarde.txt") Then
                Savelistview()
            Else
                'Création du fichier Texte
                File.CreateText(chemin)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Lancer exe"
        Button2.Text = "Ouvrir repertoire"
        Button1.AutoSize = True
        Button2.AutoSize = True
        Me.Text = My.Application.Info.AssemblyName
        If File.Exists("sauvegarde.txt") Then
            Fill_ListView(chemin, "|")
        Else
            MessageBox.Show("Création du fichier texte de sauvegarde,l'application va se fermer.", "Création fichier texte", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.Close()
        End If
    End Sub
#End Region
#Region "Listview"
    Private Sub Listview1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.Click
        ligne = CInt(ListView1.SelectedIndices(0).ToString)
        compteur = CInt(ListView1.Items(ligne).SubItems(1).Text)
        nom = ListView1.SelectedItems(0).Text
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
   Try
            ListView1.Items(ligne).SubItems(1).Text = CStr(compteur + 1)
           Process.Start(cheminexe & "\" & nom)
        Catch exc As Exception
            MessageBox.Show(exc.Message, "Erreur!", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
    'ouvrir 1 fois pour enregistrer la liste
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        ListView1.View = View.Details
        'lister les applications d'un repertoire
        Dim Repertoire As New System.IO.DirectoryInfo(cheminexe)
         Dim ListeFichier() As System.IO.FileInfo = Repertoire.GetFiles
        Dim cmpt As Int32
        For cmpt = 0 To ListeFichier.GetUpperBound(0)
            Me.ListView1.Items.Add(ListeFichier(cmpt).Name)  'Ajouter le nom 
            Me.ListView1.Items(cmpt).SubItems.Add("0")
        Next
    End Sub
#End Region
#Region "Sauvegarde"
    Private Function Fill_ListView(Optional sPath As String = "c:\temp\sauvegarde.txt", Optional sSeperator As String = "|") As Boolean
        Dim aline() As String
        Dim objReader As IO.StreamReader
        Dim sLine As String
        Dim arrText As New ArrayList()
        'Dim sSeperator As String
        Dim lvi As ListViewItem
        Fill_ListView = False
        Try
            sLine = ""
            If sPath.Length = 0 Then sPath = chemin
            sSeperator = "|"
            objReader = New IO.StreamReader(sPath)

            If IO.File.Exists(sPath) Then
                ListView1.View = View.Details
                ListView1.GridLines = True
                ListView1.FullRowSelect = True
                ListView1.Dock = DockStyle.Top
                ListView1.Columns.Add("Application", 200, HorizontalAlignment.Left)
                ListView1.Columns.Add("Compteur", 100, HorizontalAlignment.Left)
                Do
                    sLine = objReader.ReadLine()
                    If Not sLine Is Nothing Then
                        aline = sLine.Split(CChar(sSeperator))
                        lvi = New ListViewItem(aline)
                        ListView1.Items.Add(lvi)
                    End If
                Loop Until sLine Is Nothing
                objReader.Close()
            End If
            Fill_ListView = True
        Catch ex As Exception

        End Try

    End Function
    'enrgistrer listview
    Private Sub Savelistview()
        Dim SW As New StreamWriter(chemin)
        Dim Save_Listview As String = ""
        Dim i As Integer
        Dim j As Integer
        For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView 
            For j = 0 To ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView 
                Save_Listview = Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"
                ' Sauvegarde d'un item dans la ListView 
            Next j
            SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview 
            Save_Listview = ""  ' Remplacement du contenu de Save_Listview par une chaîne vide 
        Next i
        SW.Close()  ' Fermeture du fichier 
    End Sub
#End Region

End Class


Tu peux aussi mettre la ligne cliquée en rouge, mais je n'en vois pas la nécessité avec le compteur!

Bon courage
@+ Le Pivert
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
petite correction!
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
oula c'est compliqué tout ça ^^

ce que je souhaitait c'est de lancer des application portable et a chaque lancement d'une des application cela la renseigne dans une colonel à côté et pour éviter que la colons s'efface a la fermeture du programme c'est la qu'intervient de fichier supplémentaire. Je ne sait pas si c'est compréhensible ce que je veux dire.
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
C'est exactement ce que fait ce code. Si c'est trop compliqué, il faut passer à autre chose de plus compréhensible pour toi. Là il s'agit de mettre une listview dans un Form avec 2 Buttons et ensuite copier coller le code, on ne peut plus simple!!!!!!!!!!!!
Je pourrais te mettre le programme sur c-joint, mais ce ne serait pas t'aider pour poursuivre dans la programmation

Bonne continuation.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
ok, mais le problème c'est que sharpdevelop me signale 36 erreur quand je copie colle ton code, je n'ai pas fais juste que de le regarder.
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654


voilà un aperçu du programme, si cela peut t'aider?
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
ah oui c'est parfait, mais quand je veux ajouter un .exe ou .ink es si je le met dans le dossier cela me le rajoute il au programme? ou je dois recompiler le programme pour chaque appli rajouté?
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Tu peux l'ajouter au programme par code. Sinon tu supprimes le fichier texte, mais ton compteur sera remis a zéro dans ce cas là!
Si tu arrives a faire le programme ainsi et qu'il fonctionne, alors je te donnerais le code pour ajouter un EXE. Je ne vais pas t'embrouiller pour l'instant!
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
d'accord mais avant tout le code que tu m'a fournis quand je le copie colle dans mon programme de développement (sharpdevelop), il m'indique 36 erreur et donc je ne peux pas le faire fonctionner. Cela m'a fais pareil avec la personne qui l'a fournis le code avec la listbox j'ai du modifier le code pour que sharpdevelop l'interprète sinon n'avait aussi des erreur.

--
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Je n'ai pas sharpdevelop, je suis avec Visual Basic 2010. Essaie de l'adapter!
Ou télécharge le dernier Visual Basic en VB.Net, cela sera plus simple pour toi

Je peux te mettre l'exe sur c-joint en l'adaptant pour que tu puisses choisir le répertoire.

Désolé je ne peux pas faire plus

@+ Le Pivert
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
d'accord, mais c'est déjà bien ce que tu m'a donné sa va me faire avancer sur le code :)

encore merci pour ton aide.

Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Voilà l'exe:

A l'ouverture création du fichier texte et fermeture automatique du programme. Ensuite tu ouvres le programme et tu ouvres le répertoire d'EXE.

http://www.cjoint.com/c/FEhp6436XHQ
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
ah daccord je vois le rendu final est pas mal
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
J'ai essayé ton code sa fonctionne par rapport à ce que je souhaitais :) bon j'ai quand même passer du temps à le comprendre mais j'ai réussi à le tout faire fonctionner et j'ai modifier quelques choses.

- J'aimerais savoir comment supprimer la 3e colonne dans la list view car dans ton programme d'essai elle y est et dans le mien aussi.

- J'ai aussi ajouter un bouton pour supprimer le fichier txt quand on veut rajouter des programme, et j'aimerais savoir si il est possible que le fichier txt soit enregistré en temps-réel et pas quand le programme se ferme.
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Re,
- J'aimerais savoir comment supprimer la 3e colonne dans la list view car dans ton programme d'essai elle y est et dans le mien aussi.

Ce n'est pas une 3ème colonne, c'est la listview qui est trop grande par rapport aux colonnes. A toi d'ajuster , en agrandissant les colonnes ou en réduisant la taille de la listview.

et j'aimerais savoir si il est possible que le fichier txt soit enregistré en temps-réel et pas quand le programme se ferme.

Dans le code cette ligne te parle-t-elle:

 Savelistview()


et celle ci:

 'enrgistrer listview
    Private Sub Savelistview()


C'est pourtant explicite!

Il suffit de la mettre dans le bouton!

Bon courage
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Ah oui, d’accord tu m'a mis beaucoup d'instruction pour que j'adapte le code, mais celui-la je n'y avait pas fais attention.

Sinon il n'y a aucune solution pour enlever la 3e colonne dans la listview? car dans les paramètre design de Visual Basic sa n'a pas l'air de changer quelque chose.
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
La seule solution est d'agrandir les colonne ou rétrécir la listview.

Pour agrandir les colonnes dans

 Private Function Fill_ListView(Optional sPath As String = "c:\temp\sauvegarde.txt", Optional sSeperator As String = "|") As Boolean

mettre:

ListView1.Columns.Add("Application", 300, HorizontalAlignment.Left)
                ListView1.Columns.Add("Compteur", 300, HorizontalAlignment.Left)



Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
J'ai essayé sa résous le problème sauf que si on tire la colonne application plus vers la gauche on est obliger de glisser de gauche à droite pour retrouver la colonne compteur mais cela n'est pas si important.

Un autre problème est que je n'arrive pas à trouver le bon code pour ajouter une exeption quand la listview n'a pas été sélectionnée :

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Try
Process.Start(cheminexe & "\" & nom)
ListView1.Items(ligne).SubItems(1).Text = CStr(compteur + 1)
Savelistview()
Catch
MsgBox("Le programme spécifié est introuvable.", MsgBoxStyle.Critical, "ERREUR")
End Try
End Sub
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Comme ceci:

 If ListView1.SelectedItems.Count = 0 Then Exit Sub
        Try
            ListView1.Items(ligne).SubItems(1).Text = CStr(compteur + 1)
            Process.Start(cheminexe & "\" & nom)
        Catch exc As Exception
            MessageBox.Show(exc.Message, "Erreur!", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


A mettre

Savelistview()


dans le button Ajouter item comme ceci:

 Private Sub Listview1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.Click
        ligne = CInt(ListView1.SelectedIndices(0).ToString)
        compteur = CInt(ListView1.Items(ligne).SubItems(1).Text)
        nom = ListView1.SelectedItems(0).Text
    End Sub 
'ajouter un item
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        If TextBox1.Text = "" Then Exit Sub
        Dim MyLine As ListViewItem = New ListViewItem(New String() {TextBox1.Text, "0"})
        ListView1.Items.Add(MyLine)
        Savelistview()
    End Sub
    'supprimer un item
    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        If ListView1.SelectedItems.Count > 0 Then
            ListView1.Items.RemoveAt(ligne)
            Savelistview()
        End If
    End Sub

@+ Le Pivert
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654
Tu vas te trouver confronté à un autre problème: mettre le chemin du répertoire de tes EXE en mémoire !
Vas en haut à droite dans My Project, Paramètres et saisie:

cheminexe

Mettre ce code:

#Region "Declaration"
    Dim ligne, compteur As Integer
    Dim cheminexe As String
    Dim chemin As String = Application.StartupPath & "\sauvegarde.txt"
    Dim nom As String
#End Region
#Region "Ouverture et fermeture"
    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Try
            If File.Exists("sauvegarde.txt") Then
                Savelistview()
                My.Settings.cheminexe = cheminexe
                My.Settings.Save()
            Else
                'Création du fichier Texte
                File.CreateText(chemin)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
      End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        If File.Exists("sauvegarde.txt") Then
            Fill_ListView(chemin, "|")
            cheminexe = My.Settings.cheminexe
        Else
            MessageBox.Show("Création du fichier texte de sauvegarde,l'application va se fermer.", "Création fichier texte", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.Close()
        End If
    End Sub
#End Region


Voir ceci pour en savoir plus sur les Listview:

https://codes-sources.commentcamarche.net/source/101479-comparer-2-repertoires

@+ Le Pivert
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Oui j'ai lu ton poste 41 mais cela m'a paru trop compliqué donc j'ai essayé de manière simple et cela ne m'a pas posé de problème jusqu'ici. La création du fichier texte se fais alors sur le bureau mais a chaque démarrage du programme il se produit une boucle sur : "création du fichier texte l'application va se fermer"
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
le problème de la boucle sur le message est résolu j'ai modifié le code et j'ai compris pourquoi sa ne marchais pas.
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Maintenant le soucis est que sur mon bouton qui permet la suppression du fichier compteur, il supprime le fichier puis quand je ferme l'application il le re-crée, existe t-il une variable qui permet de supprimer le fichier quand on clic sur un bouton et pas quand on ferme l'application normalement? Voici le code :
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

MsgBox("Le compteur va être réinitialisé et l'application va se fermer.", MsgBoxStyle.Information, "Information")

If IO.File.Exists(chemin) Then
IO.File.Delete(chemin)
Else
MsgBox("Le fichier texte compteur est introuvable.", MsgBoxStyle.Critical, "ERREUR")
End If

Me.Close()
End Sub
Messages postés
7528
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 septembre 2021
654 >
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018

Je n'ai rien compris à la question Post 48

Si tu supprimes le fichier texte pour réinitialiser ton compteur, ce n'est pas nécessaire. Une simple boucle suffit à remettre les compteurs à 0:

  'réinitialiser compteur
    Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        Dim i As Integer
        For i = 0 To ListView1.Items.Count - 1
            ListView1.Items(i).SubItems(1).Text = CStr(0)
        Next
    End Sub


voir ceci pour comprendre le fonctionnement des listview

https://plasserre.developpez.com/cours/vb-net/?page=ui-winforms3#LVIII-H-4

@+
Messages postés
725
Date d'inscription
mardi 20 novembre 2012
Statut
Membre
Dernière intervention
9 août 2018
140
Voici tout le code de mon programme modifié à partir du tien :

Option Strict On
Imports System.IO
Public Class Form1
#Region "Declaration"
Dim ligne, compteur As Integer
Dim cheminexe As String = "C:\Users\xxx\Desktop\data" 'chemin des EXE 'a adapter
Dim chemin As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\compteur.txt"
Dim nom As String
#End Region

#Region "Ouverture et fermeture"
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Try
If File.Exists(chemin) Then
Savelistview()
Else
'Création du fichier Texte
File.CreateText(chemin)
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

Me.Text = My.Application.Info.AssemblyName
If File.Exists(chemin) Then
Fill_ListView(chemin, "|")
Else

MessageBox.Show("Création du fichier texte de comptage, l'application va se fermer.", "Création fichier texte", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.Close()
End If
End Sub
#End Region
#Region "Listview"
Private Sub Listview1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.Click
ligne = CInt(ListView1.SelectedIndices(0).ToString)
compteur = CInt(ListView1.Items(ligne).SubItems(1).Text)
nom = ListView1.SelectedItems(0).Text
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
If ListView1.SelectedItems.Count = 0 Then
MsgBox("Vous n'avez sélectionné aucun programme.", MsgBoxStyle.Critical, "ERREUR")
Else
Try
Process.Start(cheminexe & "\" & nom)
ListView1.Items(ligne).SubItems(1).Text = CStr(compteur + 1)
Savelistview()
Catch
MsgBox("Le programme spécifié est introuvable.", MsgBoxStyle.Critical, "ERREUR")
End Try
End If
End Sub
'ouvrir 1 fois pour enregistrer la liste
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

ListView1.View = View.Details
'lister les applications d'un repertoire
Dim Repertoire As New System.IO.DirectoryInfo(cheminexe)
Dim ListeFichier() As System.IO.FileInfo = Repertoire.GetFiles
Dim cmpt As Int32
For cmpt = 0 To ListeFichier.GetUpperBound(0)
Me.ListView1.Items.Add(ListeFichier(cmpt).Name) 'Ajouter le nom
Me.ListView1.Items(cmpt).SubItems.Add("0")
Next
End Sub
#End Region
#Region "Compteur"
Private Function Fill_ListView(Optional sPath As String = "(compteur)", Optional sSeperator As String = "|") As Boolean
Dim aline() As String
Dim objReader As IO.StreamReader
Dim sLine As String
Dim arrText As New ArrayList()
'Dim sSeperator As String
Dim lvi As ListViewItem
Fill_ListView = False
Try
sLine = ""
If sPath.Length = 0 Then sPath = chemin
sSeperator = "|"
objReader = New IO.StreamReader(sPath)

If IO.File.Exists(sPath) Then
ListView1.View = View.Details
ListView1.GridLines = True
ListView1.FullRowSelect = True
ListView1.Dock = DockStyle.Top
ListView1.Columns.Add("Application", 390, HorizontalAlignment.Left)
ListView1.Columns.Add("Compteur", 120, HorizontalAlignment.Left)
Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
aline = sLine.Split(CChar(sSeperator))
lvi = New ListViewItem(aline)
ListView1.Items.Add(lvi)
End If
Loop Until sLine Is Nothing
objReader.Close()
End If
Fill_ListView = True
Catch ex As Exception

End Try

End Function
'enrgistrer listview
Private Sub Savelistview()
Dim SW As New StreamWriter(chemin)
Dim Save_Listview As String = ""
Dim i As Integer
Dim j As Integer
For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
For j = 0 To ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
Save_Listview = Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"
' Sauvegarde d'un item dans la ListView
Next j
SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview
Save_Listview = "" ' Remplacement du contenu de Save_Listview par une chaîne vide
Next i
SW.Close() ' Fermeture du fichier
End Sub
#End Region

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

MsgBox("Le compteur va être réinitialisé et l'application va se fermer.", MsgBoxStyle.Information, "Information")

If IO.File.Exists(chemin) Then
IO.File.Delete(chemin)
Else
MsgBox("Le fichier texte compteur est introuvable.", MsgBoxStyle.Critical, "ERREUR")
End If
Me.Close()
End Sub

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
Savelistview()
Me.Close()
End Sub

Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
System.Diagnostics.Process.Start("http://www.xxx.net/")
End Sub
End Class