Besoin d'aide application vb
Résolucs_Le Pivert Messages postés 8437 Statut Contributeur -
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.
- Besoin d'aide application vb
- Application word et excel gratuit - Guide
- Comment supprimer une application préinstallée sur android - Guide
- Langage vb - Télécharger - Langages
- Desinstaller application windows - Guide
- Application franceconnect - Guide
19 réponses
Objectif central : créer une application Visual Basic qui liste les exécutables d'un dossier et permet de les lancer via une ListBox sans multiplier les boutons. La solution clé consiste à remplir la ListBox en lisant les fichiers du dossier, puis à lancer l'exécutable sélectionné avec Shell ou Process.Start, avec gestion d'erreur. Des améliorations évoquées portent sur la suppression de colonnes dans une ListView, l'enregistrement en temps réel d'un fichier de comptage et l'éventuel ajout d'un indicateur visuel des programmes déjà lancés. En parallèle, l'adaptation au cadre SharpDevelop et l'extension possible vers des fonctionnalités complémentaires, comme la personnalisation des chemins ou des profils, restent des options à explorer.
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
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
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à !
@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
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPour 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
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.
Je pourrais te mettre le programme sur c-joint, mais ce ne serait pas t'aider pour poursuivre dans la programmation
Bonne continuation.
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!
--
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
encore merci pour ton aide.
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
- 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.
- 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
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)
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
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
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
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

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.
Tous les programmes se situes dans le dossier C:\Program ? Ou bien ce sont des raccourci mis dans un dossier spéciales ?