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

  1. #1
    Membre régulier
    Homme Profil pro
    IT Manager
    Inscrit en
    janvier 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

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

    Informations forums :
    Inscription : janvier 2018
    Messages : 99
    Points : 119
    Points
    119
    Par défaut Impossible de convertir bout de code en fonction
    Bonjour,

    Dans mon application l'interface est un menu sur la gauche qui ouvre les différents formulaires dans un tab control central en créant chaque fois un nouveau tab.

    Pour faire ça, j'utilise ceci lorsqu'on clic par exemple sur le bouton settings du menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     TabControl1.Visible = True
            Dim t As New TabPage
            Dim newtab As New Settings(Me)
            newtab.Show()
            newtab.TopLevel = False
            newtab.Dock = DockStyle.Fill
            t.Text = "Paramétrage général"
            t.Controls.Add(newtab)
            TabControl1.TabPages.Add(t)
            TabControl1.SelectedIndex = TabControl1.TabCount - 1
            fonctions.writetolog("L'utilisateur " & connecteduser & " à ouvert " & t.Text)
    Ce bout de code s'exécute donc à chaque fois sur chaque bouton....
    J'essaie de le passer en fonction pour limiter chaque appel à une seule ligne en faisant comme ceci :

    La fonction à 2 variables, le formulaire à appeler et le texte à faire apparaître dans le tab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Function opentab(ByVal fen As Form, ByVal text As String)
            TabControl1.Visible = True
            Dim t As New TabPage
            Dim newtab As New fen(Me)
            newtab.Show()
            newtab.TopLevel = False
            newtab.Dock = DockStyle.Fill
            t.Text = text
            t.Controls.Add(newtab)
            TabControl1.TabPages.Add(t)
            TabControl1.SelectedIndex = TabControl1.TabCount - 1
        End Function
    Je ne sais pas pourquoi.... il ne veut pas reconnaître le paramètre fen.
    Il me dit " le type fen n'est pas défini".

    J'aimerais vraiment pouvoir compacter mon code car le menu ne cesse de grandir et je vais le doubler dans un ruban supérieur....
    Quelqu'un à une idée?

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    4 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 905
    Points : 10 173
    Points
    10 173
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Oui, mais ton code ne montre pas, comment tu as défini Form, ni comment tu l'envoies à ta fonction comme Fen.

    Également, il te manque ton Return à la fin de ta fonction.

    Et, je ne suis pas convaincu que d'ouvrir ta Form pour récupérer ta donnée soit la meilleure façon de le faire.

    Si l'ai bien compris, personnellement, je regarderais du côté d'un fichier de ressources (Tu peux en avoir en supplément des fichiers de ressources des forms.) Mais bon, je peux me tromper.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre régulier
    Homme Profil pro
    IT Manager
    Inscrit en
    janvier 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

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

    Informations forums :
    Inscription : janvier 2018
    Messages : 99
    Points : 119
    Points
    119
    Par défaut
    Hello,

    Merci pour la réponse.
    Effectivement, dans chaque form appelable j'ai ajouté ceci en début de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public accueilform As Accueil
        Public Sub New(acform As Accueil)
            InitializeComponent()
            accueilform = acform
    End Sub
    Pour le return oui, je peux ajouter un return mais en elle-même la fonction ne return rien si ce n'est TRUE en cas de réussite et FALSE en cas d'échec.

    Pour la suite, je ne comprends pas trop... :
    Et, je ne suis pas convaincu que d'ouvrir ta Form pour récupérer ta donnée soit la meilleure façon de le faire.
    Si l'ai bien compris, personnellement, je regarderais du côté d'un fichier de ressources (Tu peux en avoir en supplément des fichiers de ressources des forms.) Mais bon, je peux me tromper.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    4 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 905
    Points : 10 173
    Points
    10 173
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Mais dans cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function opentab(ByVal fen As Form, ByVal text As String)
    Fen, c'est quelle Form ? Et c'est quoi la ligne qui l'appelle ? Si ta Fen c'est une form unique et que ta fonction est dans le module de cette Form, je ne suis pas sûr que ce soit nécessaire de la transmettre.

    Pour la suite, je ne comprends pas trop... :
    Et, je ne suis pas convaincu que d'ouvrir ta Form pour récupérer ta donnée soit la meilleure façon de le faire.
    Si l'ai bien compris, personnellement, je regarderais du côté d'un fichier de ressources (Tu peux en avoir en supplément des fichiers de ressources des forms.) Mais bon, je peux me tromper.
    Ce que je comprends, c'est que tu veux ouvrir une form pour trouver une donnée. Si ce n'est pas cela, désolé.

    Si l'idée c'est d'avoir une seule Form qui affiche un seul volet à chaque utilisateur et que chaque volet doit surveiller ce que son utilisateur fait, là j'avoue que tu m'as perdu en chemin. Plus de code et quelques captures d'écran (m')aideraient. Si ton application se retrouve sur toutes tes machines et sert "d'explorateur Windows"; cela me semble être plus approprié d'envisager une d'application MDI qui affiche des Form au besoin q'une seule form "extensible". Mais honnêtement, j'ai trop de "si" en tête et pas de solution.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Membre régulier
    Homme Profil pro
    IT Manager
    Inscrit en
    janvier 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

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

    Informations forums :
    Inscription : janvier 2018
    Messages : 99
    Points : 119
    Points
    119
    Par défaut
    Effectivement je pense que tu ne m'as pas compris :p
    Je vais essayer avec des captures d'écran.

    Donc, l'interface de l'application quand tu l'ouvres est un menu situé à gauche et un grand trou vide au centre :
    Nom : Capture.PNG
Affichages : 37
Taille : 48,3 Ko

    Quand l'utilisateur choisi une des options du menu, le form concerné s'affiche dans le trou du centre, qui est en fait un tab control, dans un nouveau tab :
    Si je clic sur "paramétrage général", le tab s'ouvre et le form "Settings" est affiché :
    Nom : Capture2.PNG
Affichages : 38
Taille : 117,2 Ko

    Ect, ect pour les autres options.

    Donc dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function opentab(ByVal fen As Form, ByVal text As String)
    Fen représente le form du projet qui doit être affiché dans le tab control.
    C'est donc une variable de type Form que je souhaite passer en argument dans la fonction.

    J'espère que c'est plus clair comme ça

  6. #6
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    octobre 2008
    Messages
    1 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 845
    Points : 3 877
    Points
    3 877
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Avec les screenshots c'est vraiment plus clair ...
    Je n'aurai qu'une chose à dire ....il y a carrément plus simple car à mon avis ce type de gestion de menu risque de complexifier grandement ton projet et à ce stade il faudrait se concentrer sur l'essentiel qui est le traitement des données ....

    ----> Un exemple :
    TabcontrolVerticalProject.zip

    Pour la gestion du menu :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Public Class Form1
     
        Public Sub New()
            InitializeComponent()
            TableLayoutPanel1.Dock = DockStyle.Fill
            HideMainMenuTabs() 'Commenter cette ligne permet d'afficher les entetes des TabPages du TabControl1.
            AssociateButtonsToTabPages()
        End Sub
     
        'On cache les entetes des TabPages pour gagner en ergonomie d'affichage sur le côté droit
        Private Sub HideMainMenuTabs()
            With TabControl1
                .SuspendLayout()
                .SizeMode = TabSizeMode.Fixed
                .ItemSize = New Size(0, 1)
                .Appearance = TabAppearance.FlatButtons
                .ResumeLayout()
            End With
        End Sub
     
        ' On associe les boutons aux Tabpages en se basant sur la propriété .Tag pour les boutons et l'index de positionnement du bouton dans la grille du TableLayoutPanel1
        Private Sub AssociateButtonsToTabPages()
            For Each ctrl As Control In TableLayoutPanel1.Controls
                If TypeOf ctrl Is Button Then
                    ctrl.Tag = TableLayoutPanel1.GetRow(ctrl)
                End If
            Next
        End Sub
     
        Private Sub Menu_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click
            SelectTab(sender.tag)
        End Sub
     
        Private Sub SelectTab(BtnIndex As Integer)
            'On appelle le tabpage correspondant à l'index stocké dans la propriété .Tag du bouton
            TabControl1.SelectedIndex = BtnIndex
        End Sub
     
     
    End Class
    En mode Designer dans VS :

    Nom : TabcontrolVerticalProject0.jpg
Affichages : 33
Taille : 67,3 Ko


    En mode Execution :

    Nom : TabcontrolVerticalProject1.jpg
Affichages : 32
Taille : 22,4 Ko


    Si tu as des questions n'hésites pas

    Bon codage

  7. #7
    Membre régulier
    Homme Profil pro
    IT Manager
    Inscrit en
    janvier 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

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

    Informations forums :
    Inscription : janvier 2018
    Messages : 99
    Points : 119
    Points
    119
    Par défaut
    Hello,

    Merci pour ta réponse .
    J'ai refait ton exemple dans un projet neuf et rien ne se passe quand je clic sur les boutons...

    Mais j'ai l'impression que ce code ne gère pas vraiment les onglets comme je le voudrais...
    Je voudrais que quand on clique sur un bouton, l'onglet qui s'ouvre soit sur la 1ere place à droite.
    On dirait que ton code, si on clique bouton5 par exemple, va afficher le tab5 en plein milieu d'une ligne vide.
    Je ne sais pas le vérifier vu que le code ne fonctionne pas .

    Je pense aussi qu'il ne peut pas gérer l'affichage multiple du même onglet.... ce qui est indispensable dans mon application.
    Plusieurs fonctions s'exécutent dans leur propre thread et les utilisateurs ouvrent souvent plusieurs fois le même onglet pour lancer simultanément la même tâche avec des paramètres différents.

  8. #8
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    octobre 2008
    Messages
    1 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 845
    Points : 3 877
    Points
    3 877
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Il est probable que cet exemple ne corresponde pas à tes attentes .... mais le projet en pj fonctionne en l etat donc si tu n arrives pas a le reproduire dans un projet neuf... c est que tu appréhendes très mal son fonctionnement et cela ne veut pas dire pour autant que ça ne fonctionne pas !

    La gestion des onglets se fait en les associant aux boutons... donc tu peux déterminer une autre routine d association.... (comme commenté dans le projet).

    Maintenant si tu veux appeler plusieurs fois le contenu d un tab alors il serait judicieux de mettre en place des usercontrol.
    Et le passage de paramètres... c est assez simple il fait créer une classe qui va manager ton interface et ta logique applicative (gestion des donnees).

    Il y a beaucoup de solutions...faut juste trouver celle qui correspond à ton projet.

    Cdlt.

  9. #9
    Membre régulier
    Homme Profil pro
    IT Manager
    Inscrit en
    janvier 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

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

    Informations forums :
    Inscription : janvier 2018
    Messages : 99
    Points : 119
    Points
    119
    Par défaut
    Ok merci,

    Oui désolé j'ai un peu rushé le code que tu as donnés mais je manque un peu de temps et j'ai pas envie d'oublier :p.
    Je vais m'y coller et chercher sur le net sur les usercontrols.

Discussions similaires

  1. Convertir ce bout de code (texte) en lien cliquable
    Par zvath773 dans le forum Débuter
    Réponses: 1
    Dernier message: 18/03/2012, 21h39
  2. Passer un bout de code html en paramètre d'une fonction javascript
    Par yoshimitsu dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 04/08/2011, 14h40
  3. rendre invisible un bout de code en fonction d une radio box
    Par florianjoy54 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/02/2011, 14h14
  4. bout de code à dechifrer svp
    Par bball dans le forum C
    Réponses: 32
    Dernier message: 20/01/2005, 23h23

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