IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Une belle interface ?


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut Une belle interface ?
    Bonjour,

    J'aimerais créer un programme avec une interface "moderne".
    C'est à dire :

    Sur la gauche de la fenêtre un groupbox contenant des boutons et au milieu quelque chose qui permet d'afficher un exécutable.
    L'idée, c'est que chaque bouton contenu dans le groupbox est un "module", un exécutable externe, pour éviter les compilations super longues....

    Le clic sur le bouton fait appel à l’exécutable dans la partie centrale de l'interface.

    J'ai essayé avec un tabcontrol car j'aime bien l'idée de créer chaque fois un onglet qui contient l'exe en cours.... mais sans succès.

    J'ai cherché pendant 2 jours sur le net, j'en suis à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Imports System.Diagnostics.Process
    Imports System.Runtime.InteropServices
     
    Public Class Accueil
        Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
        Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
        Private Const WM_SYSCOMMAND As Integer = 274
        Private Const SC_MAXIMIZE As Integer = 61488
        Private proc As Process = New Process()
     
        Private Sub QuitterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles QuitterToolStripMenuItem.Click
            End
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            proc = Process.Start("chemin du programme à exécuter")
            proc.WaitForInputIdle()
            SetParent(proc.MainWindowHandle, TabControl1.Handle)
            SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
        End Sub
    End Class
    Ca fonctionne +/- donc je suppose que j'y suis presque.
    Si je prends notepad par exemple, ça marche... même si ça ne s'ouvre pas dans un onglet.
    Un autre exé s'ouvre mais toujours en pop-up comme une nouvelle appli.

    Quelqu'un a-t-il une solution?
    Ou bien ce genre d'interface n'est pas possible avec visual studio/ VB.net ?

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Si le seul problème est le temps de compilation, cré plutôt des DLLs que tu intégres à ton projets, ce sera certainement plus simple.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    J'aurais plutôt dit si le temps de compilation est le seul problème change de pc ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Non c'est un peu plus compliqué que ça...
    Le soft sera utilisé dans mon entreprise.

    Ce que je veux éviter, c'est de devoir éjecter tous les utilisateurs connectés pour mettre à jour l'appli.
    L'idée c'est de tout faire dans des module séparés, si un module doit être mis à jour, les utilisateurs sont seulement éjectés de ce module.

    Bref ,

    J'avais déjà vu le truc des DLL mais j'avais lu que ce n'était pas possible en VB, seulement en C.

    Je vais retourner sur internet voir ce que je trouve mais si quelqu'un peut me donner un lien direct je gagnerai du temps .

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Je ne comprends pas du tout le besoin de devoir éjecter les personnes pour une mise à jour...
    C'est donc un problème de déploiement?

  6. #6
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Actuellement je travaille avec des exécutables.

    Donc, je fais mon programme, je le compile et je le met dans un répertoire accessible via le réseau.

    Ensuite, je mets sur le bureau de chaque utilisateur un raccourci vers cet exe.

    Si je dois mettre à jour et que l'exe est utilisé par quelqu'un, c'est foutu....
    Voilà pourquoi je m'arrange le droit d'éjecter les utilisateurs connectés .... sans redémarrer le serveur complet.

    Si il existe d'autres possibilités je suis preneur.
    J'ai entendu qu'en utilisant une DLL ça ne posait pas de problème car elle peut être mise à jour en cours d'utilisation.
    La mise à jour n'est visible qu'une fois la DLL rechargée.

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Je connais bien cette manière de rendre disponible les applications, nous l'utilisions à mon précédent travail.
    En se connectant au serveur il y a moyen de casser le lien entre le fichier bloqué et les utilisateurs, c'est un peu chiant mais ça n'éjecte pas l'utilisateur de l'application.
    Après avoir utilisé cette méthode, nous avions utilisé ClickOnce, vraiment très pratique, tu définis toujours sur ton serveur le répertoire où se trouvera le programme et ces mises à jour directement dans visual studio et il te suffit après via Visual Studio de dire de déployer et il met la nouvelle version sur le serveur. Aux utilisateurs, tu donnes le chemin vers le manifeste et quand ils l’exécutent, soit l'application est installée avec toutes ces dépendances, soit elle est exécutée. Dans les réglages de clickOnce tu peux définir si l'application se met a jour en quittant ou en entrant dedans et d'autres choses.
    Avantage, l'exe n'est plus téléchargé à chaque lancement de l'application, seul le numéro de version est vérifié, c'est con mais quand tu as un réseau pourris entre plusieurs sites de ton entreprise tu vois vraiment la différence. Et surtout, quelle facilité pour déployer les applications...

  8. #8
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Ok,

    J'ai l'impression de ne pas avancer sur le sujet...

    J'ai trouvé un beau tuto en 3 parties sur les DLL mais visiblement c'est pour les utiliser avec excel.
    Je vais quand même tout regarder ..... si on me laisse un peu tranquille aujourd'hui au boulot !

    Ok, j'ai vu un peu clickonce, ça à l'air pas mal du tout pour les updates en effet.

    Par contre, je reste toujours bloqué sur comment intégrer un exécutable dans l'interface ....

    Ou alors tant pis, je refait tout dans un seul soft ? Avec clickonce je n'aurai pas vraiment de soucis à part le temps de compilation mais c'est secondaire franchement..... on ne peut pas faire du compilé sans compiler à un moment.....!

    ça peut se fait car je sais comment ajouter dans un tabcontrol un nouvel onglet et y mettre un autre form du projet, ça pour le coup c'est cool...
    Par contre, comment mettre une option pour fermer l'onglet et le form en même temps ?

    Dans le form, j'ai déjà testé un bouton qui fait Me.close() mais évidemment, impossible d'aller dire dans le form principal de fermer l'onglet associé....
    Je sais pas si c'est clair :p !

  9. #9
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    J'ai créé une nouvelle discussion avec la question de r.morel sur le déploiement de ClickOnce pour ne pas polluer cette discussion avec deux problèmes différents.

    Concernant votre problème, je ne peux vous aider sur l'intégration d'un exe dans votre interface, mais je suis assez surpris de vos problèmes de lenteur de compilation.
    J'ai déjà travaillé sur de gros projets avec des pc moyens et je n'ai jamais eu de grosse lenteur de compilation, ou du moins, rien qui ne justifie ce que vous essayez de faire donc je serais de l'avis de Pol63, changez de PC ou réinstallez l'actuel et mettez en place Clic Once et tous vos soucis seront réglé.

  10. #10
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Non je n'ai pas vraiment de lenteur de compilation
    C'est juste que le projet vas être relativement gros et je m'étais dis que le subdiviser en plusieurs exé appelés via une interface uniquement serait plus efficace...

    Plus j'avance dans les recherches, plus je me rends compte qu'un controltab n'est pas du tout adapté.
    La maintenant je regarde avec un webbrowser, je cherche comment y ajouter un onglet...si c'est possible.

    J'arrive déjà à ouvrir un form dans le webbrowser mais impossible d'ouvrir un 2e sans le faire dans un 2e onglet, ce qui est le but de toute manière.

    J'ai su bien avancer grâce à ce tuto :


    Sauf que j'utilise pas le webbrowser... j'en suis revenu au tabcontrol.

    Il me reste à renommer l'onglet créé ... chose que j'aurai cru simple mais je n'ai pas encore trouvé.
    Trouver comment fermer l'onglet en cours quand on quitte le form qui s'est ouvert dedans....

  11. #11
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    pfff je deviens fou...

    J'ai réussi à trouver comment renommer l'onglet...

    Mais, je n'arrive pas à me positionner dedans après qu'il se soit ouvert.
    Pourtant le code me semble bien :

    Voici le code :
    Le but est d'ouvrir dans un onglet le form Database et si ce n'est pas le seul onglet du tabcontrol, se positionner dedans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim t As New TabPage
            Dim newtab As New Database
            newtab.Show()
            newtab.TopLevel = False
            newtab.Dock = DockStyle.Fill
            t.Text = "Gestion base de donnée"
            t.BackColor = Color.PowderBlue
            t.Controls.Add(newtab)
            TabControl1.TabPages.Add(t)
            Database.FormBorderStyle = FormBorderStyle.None
            TabControl1.SelectedIndex = TabControl1.TabCount + 1
            TabControl1.Select()
            TabControl1.SelectedTab.Show()
        End Sub
    Je désespère... et je suis sur que la solution est toute conne mais qu'il faut juste prendre le bon chemin.
    Aussi je cherche à ajouter un bouton qui ferme le tab et son contenu, ou un moyen quand on quitte le form ouvert dans le tab de fermer le tab concerné... peut être avec Invoke?

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par thovan Voir le message
    Si il existe d'autres possibilités je suis preneur.
    oui il y a des tas d'autres possibilités infiniment mieux … même sans clickonce

    déjà mettre un seul exe pour plusieurs utilisateurs c'est à éviter
    il vaut mieux faire une install pour chacun sur leur poste, les mises à jour sont plus faciles à gérer

    après ce que j'avais fait y a un dizaine d'années, c'est que l'exe vérifie ses mises à jour quelque part (un dossier réseau peut convenir), rapatrie les fichiers plus récents dans un sous dossier, averti l'utilisateur que ca va couper, lance un autre exe à côté pour modifier les fichiers avec ceux du sous dossier puis on process.Start le programme
    c'est instantané pour l'utilisateur, et assez simple à coder
    il y a un 2ème exe car les fichiers sont verrouillés pendant l'utilisation du programme
    après il existerait shadowcopy pour ne pas verrouiller les fichiers, il est aussi possible de renommer les fichiers pendant leur utilisation

    il est aussi possible de faire un launcher comme le font certains jeux vidéos, ca utilise aussi le principe de 2 exe
    le launcher s'occupe de faire les mises à jour et lance le vrai exe si c'est à jour (il est possible de relancer le launcher si une mise à jour est détectée par l'exe puis application.Shutdown et le launcher relancer l'appli mise à jour)
    le launcher ne contient donc qu'une fenetre (qu'on affiche que s'il faut faire attendre par exemple)



    pour intégrer plusieurs exe dans un seul il y a new appdomain puis du .load puis lancer quelque chose dedans
    ca marche avec des dll, donc avec des exe ca ira aussi
    mais ce n'est pas toujours une bonne idée de mettre plusieurs softs dans un seul, il faut que ca soit bien pour être pratique

    en Windows forms il est possible d'héberger un form dans un autre form, car form hérite de control (donc me.controls.Add(unform) fonctionne si on a mis toplevel à false il me semble)
    en wpf je n'ai pas essayé de mettre un window dans un window mais j'y crois pas trop, après il est possible de faire en sorte d'avoir des UC
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Une autre idée ...
    Je sais que ceci ne répond pas à la question initiale mais c'est une suggestion en matière de mise à jour d'exe quand ils ne sont pas utilisés.
    Il suffit de remplacer les exe quand les utilisateurs ne sont pas à leur poste.
    Alors, bien sûr, les EXE ne sont libres qu'en dehors des heures de bureau et encore ..., et à ce moment l'informaticien est aussi reparti.
    Pourquoi ne pas faire un petit programme qui remplace les EXE entre 1 et 2 heure du matin, par exemple ?
    J'ai personnellement utiliser cette astuce pour manipuler une DB Access (backup et compactage) chaque nuit,alpors que la DB était urtilisée 6 jour semaine, de 7h30 à 22h.
    Bonne soirée,

  14. #14
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Oui pourquoi pas.
    Mais le truc de ClickOnce semble intéressant :p

    Ceci dit, je n'avance pas vraiment sur le sujet principal... l'interface !
    J'ai vu qu'il existait des addons qui ajoutaient automatiquement des boutons fermer sur les onglets des tabcontrols mais c'est payant

    Je tente ma chance avec un webbrowser.

  15. #15
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Voilà, j'ai trouvé comment tout faire fonctionner.

    Je poste le code si jamais ça peut intéresser quelqu'un :

    Pour ouvrir un autre form dans le tabcontrol :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            TabControl1.Visible = True
            'Créer un nouvel onglet
            Dim Onglet As New TabPage
            'Assigner à l'onglet un autre form du projet
            Dim Contenu As New MONFORM(Me)
            Contenu.TopLevel = False
            Contenu.Dock = DockStyle.Fill
            Contenu.Show()
            Onglet.Text = "MONFORM"
            Onglet.Controls.Add(Contenu)
            TabControl1.TabPages.Add(Onglet)
            'Positionner le tabcontrol dans le nouvel onglet
            TabControl1.SelectedIndex = TabControl1.TabCount - 1
        End Sub

    Pour fermer l'onglet, j'utilise l'événement formclosed dans le form ouvert dans l'onglet.
    Donc,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Class MONFORM
        'Définit un form comme étant le form Accueil/menu
        Public accueilform As Accueil
        Public Sub New(acform As Accueil)
            InitializeComponent()
            accueilform = acform
        End Sub
        'On peut maintenant aller depuis ce form agir sur n'importe quel controle du form accueil
        Private Sub Database_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
            accueilform.TabControl1.TabPages.Remove(accueilform.TabControl1.SelectedTab)
            If accueilform.TabControl1.TabCount = 0 Then
                accueilform.TabControl1.Visible = False
            End If
        End Sub
    End Class
    J'espère que c'est assez clair parce que j'ai pas encore l'impression d'avoir tout à fait compris comment ça fonctionne.... mais ça le fait !
    Je laisse encore le topic ouvert quelques jours si quelqu'un veut ajouter quelque chose ensuite je le ferme.

    Merci à tous en tout cas pour votre aide

Discussions similaires

  1. Je cherche à faire une belle interface web en J2EE
    Par Aldian dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 07/09/2010, 18h44
  2. Faire une belle interface avec MS Visual C# 2008 express
    Par pdtor dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/04/2009, 14h08
  3. Quel logiciel utiliser pour faire une belle interface web?
    Par irnbru dans le forum Webdesign & Ergonomie
    Réponses: 7
    Dernier message: 18/10/2006, 09h07
  4. [Debutant] Faire une belle explosion
    Par atchoum_69 dans le forum DirectX
    Réponses: 4
    Dernier message: 08/10/2004, 13h54
  5. Réponses: 10
    Dernier message: 30/06/2004, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo