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 :

Problème de gestion événements sur tableau de controles.


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut Problème de gestion événements sur tableau de controles.
    Bonjour
    Je suis débutant en langage VB.net et j'aimerais créer une form qui permettrait de créer des fenêtres personnalisées.
    Exemple : En bas de ma form je mets une combobox, un label etc. Lors d'un clic sur un contrôle (par l'utilisateur), je veux créer un nouveau contrôle de la catégorie cliqué (new label si clic sur label1, nouvelle textbox si clic sur textbox1 etc)...

    Je m'amuse pour l'instant au déplacement et création des contrôles mais je bloques à présent sur la gestion des événements pour chaque label ou textbox créés et je ne sais pas trop comment faire.

    Voici mon code pour le moment :
    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
    42
    43
    44
    45
    Public Class Form1
        Dim lbl As New List(Of TextBox)
        Dim i As Integer = 0
        Dim ok As Boolean = False
        Dim y As Boolean = False
     
        Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDown
            If Windows.Forms.MouseButtons.Left Then
                ok = True
                lbl.Add(New TextBox)
                Me.Controls.Add(lbl.Item(i))
            End If
     
        End Sub
     
        Private Sub TextBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseMove
     
            If ok Then
     
                With lbl.Item(i)
                    .Visible = True
                    .Location = New System.Drawing.Point(Me.PointToClient(MousePosition))
                    .Text = "Lbl" & i
                End With
     
     
            End If
            If i >= 1 Then
     
                    y = True
     
                End If
        End Sub
     
        Private Sub TextBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseUp
            ok = False
            If y Then
                lbl(i).Location = New Point(lbl(i).Location.X, lbl(i - 1).Location.Y)
            End If
     
            i += 1
        End Sub
     
     
    End Class
    Ma question est donc Où placer le code addhandler (si j'ai bien compris c'est celui qu'il me faut), et comment l'utiliser ?

    Par avance Merci de votre précieuse aide

    P.S : J'ai changé mes labels en textbox sans changer le nom, voila pourquoi je créé une liste de lblet non pas txt, pour les plus pointilleux d'entre vous

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    ta variable i c'est une mauvais idée
    si tu veux pouvoir déplacer les controles, il faut gérer un controle sélectionné (une variable as control)
    tous les controles héritent de la classe control (je veux dire par là que tu peux ranger tout ce que tu créés dans un list(of control) plutot que de faire une list par type)

    sinon pour les évents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim t as new textbox
    addhandler t.mousedown, adressof unemethode
    me.controls.Add(t)
    dans ta méthode, il faut mettre les paramètres comme le requiert l'évènement que tu choisis
    dans tous les cas ca commence par sender as object, mais e peut différer
    et sender contient l'instance qui a déclenché l'évènement (si tu as 3 textboxes, sender sera celui qui vient d'avoir le mousedown)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Tout d'abord Merci d'avoir pris le temps de me répondre.
    Donc si je comprends bien, mon code devrait plus tôt être du style :
    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
    42
    43
    44
    45
    Public Class Form1
        Dim Ctrl As New List(Of Control)
        Dim var As Integer = 0
        Dim ok As Boolean = False
        Dim y As Boolean = False
     
        Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDown
            If Windows.Forms.MouseButtons.Left Then
                ok = True
                Ctrl.Add(New TextBox)
                Me.Controls.Add(Ctrl.Item(var))
            End If
     
        End Sub
     
        Private Sub TextBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseMove
     
            If ok Then
     
                With Ctrl.Item(var)
                    .Visible = True
                    .Location = New System.Drawing.Point(Me.PointToClient(MousePosition))
                    .Text = "Lbl" & var
                End With
     
     
            End If
            If var >= 1 Then
     
                    y = True
     
                End If
        End Sub
     
        Private Sub TextBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseUp
            ok = False
            If y Then
                Ctrl(var).Location = New Point(Ctrl(var).Location.X, Ctrl(var - 1).Location.Y)
            End If
     
            var += 1
        End Sub
     
     
    End Class
    Rien que ça c'est ok.
    Mais si j'ai un controle style richtextbox j'avais ce code avant de mettre "new list(of control)" j'avais un "new list(of richtextbox)" et ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With richtextbox(i)
                        .ReadOnly = True
                        .BorderStyle = BorderStyle.None
                        .BackColor = Me.BackColor
                        .Text = "Nom_Client.Feuille().Interventions(0).Opération"
                    End With
    Maintenant que c'est une liste de controles je n'ai plus richtextbox.readonly ni le border style. Comment je peux lui dire que c'est des richtextbox ou label ou autre ?

    Et pour en revenir au addhandler, si je comprends bien ça doit donner un code de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i as integer = 0 to Ctrl.count - 1
    addhandler ctrl(i).Mouseclic, adressof fonction
    next
     
    private sub fonction()
    'gère la fonction lors d'un clic souris sur controle CTRL(i)
    end sub
    un truc du style non ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    quand je disais la variable i c'est une mauvaise idée, je ne disais pas de la renommer, mais de la supprimer et de faire autrement

    quand on une instance dont on connais le type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    directcast(unctrl,richtextbox).borderstyle = ...
    si on veut tester le type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if typeof unctrl is richtextbox then
    quant au addhandler, il ne faut pas le faire plusieurs fois par controle, donc le mieux c'est au moment ou tu le créés, pas dans une boucle ailleurs
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Ah ok pour ça, merci.

    Pour ce qui est de ma variable i, je ne comprends pas trop ce que vous me conseillez :
    Pourquoi c'est pas "bon" ?
    Remplacer le "as integer = 0" par un "as Control" ?
    Du coup comment je pourrais savoir à quel contrôle j'en suis si je n'ai plus mon index i ?

    Peut être faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim unControle as new list(of control)
    dim i as controle
    'code etc etc
     
    unControle.add(i)
    Mais du coup je ne connais pas sa référence ! il me faut quand même une variable pour incrémenter je me trompe?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    il faudrait préciser un peu plus ce que vous voulez faire au final
    et pourquoi voulez vous savoir où vous en etes (sachant que vous en etes à listcontrol.count - 1 ou listcontrol.last) ?

    et avez vous déjà réfléchit à l'enregistrement (en base ?) ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Je souhaiterais pouvoir positionner chaqu'un de mes controles individuellement (donc savoir sur quel controle on clique) et pour des label j'aimerais pouvoir leur assigner un texte.
    Genre j'ai un fichier xml avec des attributs et je voudrais pouvoir assigner ces noms à certains label.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uncontrole(var).text = monfichierxml.attribut1
    sachant que je n'ai pas les même noms dans les labels !

    ensuite je voudrais a coté des labels mettre des textbox avec la valeur des attributs que je pourrais modifier
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uncontrole(var).text = monfichierxml.valeurattribut1
    et ensuite pour la sauvegarde, j'enregistre tout dans ce même fichier xml en fonction des valeurs dans les textbox etc d'ou l'importance de savoir qui est ou et qui contient quoi.

    Quand vous parlez de sauvegarde vous entendez quoi ? la sauvegarde de la page?

    j'avais pensé a pareil un fichier xml qui contiendrait les locations et les types de controles c'est pas bien ?

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    pour l'enregistrement, location et texte pour les labels, location et champ xml pour les textboxes
    + l'info du type de controle à réinstancier
    pour l'enregistrement du fichier, la sérialisation est pratique (xml ou binaire) (2 lignes de code dans chaque sens)

    après en théorie pour le déplacement, c'est soit sélection/déplacement/déselection, soit glissé/déplacé
    dans les 2 tu sais quel controle est en train d'être déplacé, donc je ne vois pas pourquoi garder un index (ou alors tu as prévu que seul le dernier controle posé soit déplacable, et c'est une mauvaise idée)

    après on peut aussi imaginer un déplacement de plusieurs controles en même temps
    et gérer l'alignement (dans vs il y a ce qu'il faut pour gérer ca par exemple, et c'est pratique)

    après on peut imaginer une classe qui stocke toutes ces infos, et ton list serait alors un list(of cetteclasse)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    oula ^^ n'allons pas si vite xD. Le pauvre petit débutant que je suis à du mal a suivre !!!

    pour l'enregistrement du fichier, la sérialisation est pratique (xml ou binaire) (2 lignes de code dans chaque sens)
    Pour l'enregistrement j'ai déjà ce code :
    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
    Sub Enregistre_Fichier_XML(ByVal filename As String, Fichier_XML As Fichier_XML_Controls)
     
            Try
                Using objStreamWriter As StreamWriter = New StreamWriter(filename)
                    Try
                        Dim xsPropriety As New XmlSerializer(GetType(Fichier_XML_Controls), New XmlRootAttribute("Controls"))
                        xsPropriety.Serialize(objStreamWriter, Fichier_XML)
                    Catch ex As Exception
                        Erreur = True
                        MessageBox.Show(ex.Message)
                    End Try
                End Using
            Catch ex As Exception
                Erreur = True
                MessageBox.Show (ex.Message)
            End Try
     
        End Sub
    pour l'enregistrement, location et texte pour les labels, location et champ xml pour les textboxes
    + l'info du type de controle à réinstancier
    Si je fais un fichier XML dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Controls>
    <Controle type ="Label" Location_X ="50" Location_Y="50" Valeur ="Label(0).Text"/>
    <Controle type ="RichTextBox" Location_X ="150" Location_Y="50" Valeur ="RTB(0).Text"/>
    </Controls>
    C'est ce que vous voulez dire?

    après en théorie pour le déplacement, c'est soit sélection/déplacement/déselection, soit glissé/déplacé
    dans les 2 tu sais quel contrôle est en train d'être déplacé
    J'avoue avoir du mal à comprendre comment on sais quel contrôle est utilisé
    à moins que ce soit par le "addhandler", mais l'info retournée j'ai du mal à saisir ce qu'elle sera :/

    donc je ne vois pas pourquoi garder un index (ou alors tu as prévu que seul le dernier contrôle posé soit déplaçable, et c'est une mauvaise idée)
    Non je n'ai pas prévu cela donc je vais essayer de comprendre ce que vous voulez dire dans la citation précédente.

    après on peut aussi imaginer un déplacement de plusieurs contrôles en même temps
    et gérer l'alignement (dans vs il y a ce qu'il faut pour gérer ça par exemple, et c'est pratique)
    J'ai aussi pensé à un alignement effectivement lors d'un passage à + ou - 10px de "location.x" ou y. J'y réfléchis aussi à coté ! mais je ne souhaiterais pas en déplacer plusieurs en même temps. Juste 1 par un avec un alignement sur ceux déjà en place.

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    Citation Envoyé par Jeano81 Voir le message
    oula ^^ n'allons pas si vite xD. Le pauvre petit débutant que je suis à du mal a suivre !!!
    tu comprends mieux que certains, et ton code de sérialisation est propre donc va finir par aller ^^

    concernant le déplacement de plusieurs à la fois tu changeras peut etre d'avis plus tard, ayant déjà fait des trucs dans le genre, des fois on veut rajouter un truc et on est obliger de tout décalé (enfin nous on peut aussi copier coller des morceaux de modèles, ce n'est peut etre pas ton cas)

    et je n'ai pas encore compris comment tu gérais le déplacement (peut etre que justement ce n'est pas encore codé ^^)


    lors d'un clic le control cliqué va lever l'event Click, et cet évènement a une signature spécifique
    (signature = paramètres en nombre et en type)
    dans ton exemple plus haut tu parles de addhandler ..., addressof fonction
    et private sub fonction

    oin a le droit d'écrire ca, certes, mais on perd des infos importantes

    noramlement c'est private sub fonction(sender as object, e as system.eventargs)
    et sender est un paramètre qui contiendra le controle cliqué

    pour connaitre la signature facilement tu écris ton addhandler vers une méthode
    puis tu écris
    private sub maméthode(a as integeer)
    là à coup sur visual studio va raler et te préciser "signature ou délégué incorrect, a as integer, attendu : sender as object, e as system.eventargs
    donc tu recopies bêtement ce qu'il te dit qu'il faut (il faut avoir la fenetre liste des erreurs sous les yeux)


    après j'ai expliqué 2 principes précédemment
    dans le principe de glissé déplacé ca donne à peur près ca :
    gérer le trio mousedown/mousemove/mouseup qui permet de calculer le déplacement
    sur mousedown on enregistre le controle sélectionné
    sur mousemove on vérifie qu'on est en déplacement (si controle sélectionné isnot nothing) auquel cas on change .location de ce controle (mousemove fournit e qui contient e.position ou un truc dans le genre avec les coordonnées, mousedown fournit aussi la position pour faire le premier delta)
    et sur mouseup on "déflag" en remettant le control selectionné à nothing

    désolé si c'est pas très compréhensible mais une fois que tu auras codé tout ca tu devrais comprendre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    et je n'ai pas encore compris comment tu gérais le déplacement (peut etre que justement ce n'est pas encore codé ^^)
    C'est en fait un peut comme dans la partie visuelle de visual studio :
    J'ai mes 2 contrôles en bas de la page (à savoir un label et une textbox par exemple pour simplifier), ceux là ne vont pas bouger JAMAIIIIIS !!!!

    Et lorsque l'utilisateur va cliquer sur l'un où l'autre contrôle, ça va créer un contrôle de la catégorie cliqué (donc un label si c'est mon label en bas qui est cliqué où une textbox si c'est la textbox), donc l'utilisateur tiens le controle avec la souris, le dépose où il le souhaite et en ajoute s'il veux, peut le déplacer s'il le désire, etc etc.

    En fait c'est pour créer une fenètre avec des références pour les machines (pour mon travail).
    On à différents truc en fait et suivant si c'est des moteurs, le type de moteur, ou des variateurs ou platines électroniques, on à pas le même type de valeurs a rentrer quoi.
    Style pour un moteur ce sera tension d'alimentation, référence tours minutes cablage si étoile triangle ou monophasé etc
    pour les variateurs on aura juste le num de série tension d'entrée marque
    pour un poste à souder aussi différent bref c'est pour créer une fenêtre de données du matos quoi ! Si vous comprenez !
    Donc une fois créé je veux pas en deplacer des controles juste aligner quand je créé la page (là ou j'en suis en fait) et apres basta c fait j'y touche plus

    Et donc j'avais posté ce code au début qui me permet de créé un nouvel élément lors du clic sur un controle :

    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
    Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDown
            If Windows.Forms.MouseButtons.Left Then
                ok = True
                lbl.Add(New TextBox)
                Me.Controls.Add(lbl.Item(i))
            End If
     
        End Sub
     
        Private Sub TextBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseMove
     
            If ok Then
     
                With lbl.Item(i)
                    .Visible = True
                    .Location = New System.Drawing.Point(Me.PointToClient(MousePosition))
                    .Text = "Lbl" & i
                End With
     
     
            End If
            If i >= 1 Then
     
                    y = True
     
                End If
        End Sub
     
        Private Sub TextBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseUp
            ok = False
            If y Then
                lbl(i).Location = New Point(lbl(i).Location.X, lbl(i - 1).Location.Y)
            End If
     
            i += 1
        End Sub
     
     
    End Class
    Qui prends donc en compte le Mousedown/move/Mouseup, et je me doutes bien qu'il me faut l'assigner à chacun des contrôles créé

    Je vais essayer de coder ce que vous m'avez dit deja des que je peux et je vous tiendrais informé Merci.

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    j'ai mieux compris, mais il y a beaucoup plus simple alors ^^

    une base de données (un fichier xml pourrait faire l'affaire)
    un menu de création de type d'élément
    par exemple sur cette fentre vous rentrez le nom du nouvel élément => moteur
    puis liste des propriétés (extensible)
    libellé "tension d'alimentation" ; type "nombre" ; unité "A"
    libellé "moteur à biturbo rotatif" ; type "oui/non"
    libellé "commentaire" ; type "texte"
    ...
    vous enregistrez

    ensuite lors de la saisie d'un nouvel élement ca vous proposera tout ce qu'on peut saisir (genre moteur), puis ca va lire le paramétrage nécessaire puis poser tout ce qu'il faut directement, à savoir
    un flowlayoutpanel autoscroll
    ensuite ca voit qu'il y a la tension d'alimentation donc ca pose un label avec écrit ca dedans, puis un textbox qui n'autorise que des nombres, puis un label avec A dedans (l'unité) puis un break (passage à la ligne)
    puis la propriété suivante (et là il posera un checkbox voyant que vous avez mis oui/non)
    etc...
    donc vous n'avez pas de temps à perdre à faire des modèles de saisis, ils se fabriquent tout seul et le rendu est propre (le flowlayoutpanel permet de gérer automatiquement le positionnement des controles alignés, pas besoin de spécifier de location)

    au final ca fait juste des types (texte, nombre, oui/non) à gérer, la lecture du paramétrage pour remplir le FLP et pour l'enregistrement de la saisie ca peut s'automatiser aussi (vu qu'on connait la liste de ce qui est saisi et les controles qui ont été créés)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    ah ! j'ai jamais utilisé de flp ^^ cool un nouveau challenge ! Je suis pas très sur d'avoir tout compris mais je vais essayer déjà et je vous tiens au jus Merci

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    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 153
    Points : 25 071
    Points
    25 071
    Par défaut
    le flp a 2 propriétés intéressante, le flowdirection, et autoscroll
    flowdirection c'est le sens (si ca empile les controles de haut en bas à de gauche à droite (gauche à droite pour toi)
    autoscroll c'ests pour que si les controles dépassent la taille du flp, celui ci s'ajoute un scrollbar permettatn de faire défiler

    et par code on peut faire
    flp.Setflowbreak(uncontrol, true)
    ce qui fait qu'après ce controle il ne met plus rien et passe à la ligne
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Oui effectivement ça à l'air approprié
    Va falloir que je me renseigne sur l'autoscroll pour le gérer au mouvement de la molette de la souris !
    A moins que ce soit automatique dans le code de la FLP mais j'en doute xD !
    Merci beaucoup en tous cas !

  16. #16
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Salut à tous.

    Je me suis penché vite fait ce matin sur le problème du "gérer l'autoscroll avec la souris" et sur internet je n'ai rien trouvé....

    Néanmoins, à force de chercher dans visual studio, j'ai réussi à faire fonctionner la barre verticale de l'autoscroll avec ce code.

    Je vous le poste pour ceux qui comme moi ont cherchés sans rien trouver.

    Pour le reste je regarderais ça dès que j'en aurais le temps . Merci encore !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form1_MouseWheel(sender As Object, e As MouseEventArgs) Handles Me.MouseWheel
            If e.Delta > 0 Then
                If FlowLayoutPanel1.VerticalScroll.Value > Mouvement_X_Pixels Then
                    FlowLayoutPanel1.VerticalScroll.Value -= Mouvement_X_Pixels
                Else
                    FlowLayoutPanel1.VerticalScroll.Value = 0
                End If
     
            Else
                FlowLayoutPanel1.VerticalScroll.Value += Mouvement_X_Pixels
            End If
     
        End Sub

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/12/2014, 13h16
  2. Réponses: 4
    Dernier message: 16/07/2013, 19h40
  3. Problème gestion évènement sur MicroFramework
    Par Sylvanocry dans le forum C#
    Réponses: 2
    Dernier message: 28/02/2010, 23h35
  4. Problèmes d'évènements sur ComboBox
    Par bakaneko dans le forum MFC
    Réponses: 3
    Dernier message: 23/02/2004, 08h46
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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