Besoin d'aide application vb

Résolu/Fermé
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 - 5 mai 2016 à 17:41
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 17 mai 2016 à 07:59
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.
A voir également:

19 réponses

hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
5 mai 2016 à 20:37
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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 5/05/2016 à 21:29
Avant tout je te remercie de m'être venu en aide mais ce n'est pas tout à fais ce que je veux faire. Ce que je veux faire est de créer un menu ou avec la liste box je sélectionne le nom d'un programme (portable ou installé comme firefox par exemple ou ccleaner portable). Et lorsque je le sélectionne et que j'appuie sur un bouton cela lance le programme, c'est ni plus ni moins qu'un mini lanceur de programme.

Sauf que ce n'est pas fais avec des boutons codé ou je dois programmer chaque bouton 1 à 1 car j'ai une centaine de programme donc cent bouton à programmer (oula jvais y passer la vie ^^), et donc le but du programme est que il me liste tout les programme portable d'un dossier que j'aurais indiqué dans le code du programme et quand j'en sélectionne un dans la liste box cela me le lance.
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
5 mai 2016 à 21:30
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.
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
5 mai 2016 à 21:34
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.
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
5 mai 2016 à 22:25
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 ?
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 5/05/2016 à 22:46
Non enfaite ce sont des programmes portables, des programmes qui ne nécessitent pas d'installation.
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
6 mai 2016 à 10:36
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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 6/05/2016 à 14:54
C'est exactement ce que je voulais merci, le code que tu m'a fais j'ai juste du l'adapter à sharp develop car j'ai eu quelques erreur. J'ai une autre question peut-on masquer l'arborescence des fichier? j'aimerai juste avoir le nom des programme pas avec l'arborescence (c:\user\nomducompte\desktop\nomdudossier\nomduprogramme).
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
6 mai 2016 à 15:43
Je pense que ça pourrait se faire, mais ca serait beaucoup plus compliqué.
J'essaie et je te redit plus tard.
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
6 mai 2016 à 15:55
Je ne pensais plus à la propriété name du fichier...

Tiens, c'est le même code avec deux modifications:

Public Class Form1

    Dim EmplacementDossier As String = "C:\" '  n'oublie pas de mettre le slash à la fin

    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.Name)
        Next
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Shell(EmplacementDossier & 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


Voilà !
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 6/05/2016 à 19:47
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).
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
6 mai 2016 à 21:04
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"
.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
Modifié par Whismeril le 7/05/2016 à 08:38
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
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
Modifié par hcp7kuz le 7/05/2016 à 11:47
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 ?
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928 > hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019
7 mai 2016 à 16:10
Shell, msgbox, etc.. n'existent pas en Vb.net
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 15:03
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 15:11
@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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 7/05/2016 à 16:27
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 mai 2016 à 16:25
petite correction!
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 16:34
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 mai 2016 à 16:45
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.
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 16:48
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 mai 2016 à 16:49


voilà un aperçu du programme, si cela peut t'aider?
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 16:52
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é?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 mai 2016 à 16:57
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!
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 17:00
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.

--
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 7/05/2016 à 17:10
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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 7/05/2016 à 17:23
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.

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 mai 2016 à 18:00
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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
7 mai 2016 à 22:35
ah daccord je vois le rendu final est pas mal
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
10 mai 2016 à 23:12
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
11 mai 2016 à 07:57
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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
13 mai 2016 à 20:11
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 mai 2016 à 07:57
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)



0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 15/05/2016 à 01:02
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 15/05/2016 à 08:07
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 15/05/2016 à 08:32
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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
15 mai 2016 à 22:29
J'ai réussi à contourner le problème en modifiant le code de la manière suivante en jouant avec les If, end if, try, catch etc.. mais je ne sais pas si j'aurais des bugs je vais tester sa. Je te laisser jeter un coup d'oeil au code et me dire si cela est correct ou si cela va créer des bugs :

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
If ListView1.SelectedItems.Count = 0 Then
MsgBox("no item selected.", 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
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141 > Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018
16 mai 2016 à 00:10
j'aimerais aussi déplacer la création du fichier texte vers le bureau mais je n'arrive pas à y parvenir.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018
16 mai 2016 à 07:51
Re post 43:

As-tu lu ma réponse post 41?

Tout est dit!

j'aimerais aussi déplacer la création du fichier texte vers le bureau mais je n'arrive pas à y parvenir.

 Dim chemin As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\sauvegarde.txt"
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
Modifié par Materio le 16/05/2016 à 18:56
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"
0
Materio Messages postés 725 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 9 août 2018 141
16 mai 2016 à 19:31
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.
0