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 :

Aide docking panels


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut Aide docking panels
    Bonjour,
    j'essaie de créer un docking panel depuis quelques jours mais j'ai petit un probleme:

    Quels evenements sont les plus appropriés pour gérer le drag & drop de mes petites fenetres dockables ?
    J'utilise les events Form.Move et Form.MouseCaptureChanged parce que j'ai rien trouvé de mieux.. Les events Form.DragEnter et DragLeave ont l'air d'être le top mais je n'arrive pas à le mettre en place..

    Merci d'avance pour votre aide
    J’ai des questions à toutes vos réponses!

  2. #2
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Bon comme personne me m'aime D: je me suis debrouillé autrement.
    J'ai caché la bordure de ma petite fenetre dockable et je lui ai ajouté un panel en guise de controlbox ce qui me permet d'avoir les events mousedown et mouseup sur ce panel. Le seul probleme maintenant, c'est que les evenements mouseup et mousedown ne declenche pas toutes les methodes que je veux et je ne comprend pas pourquoi..


    Ici, seul les methodes DragContent et PanelText_MouseDown fonctionnent mais pas DropContent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Dim dockContent As New DockContent()
            AddHandler dockContent.PanelText.MouseDown, AddressOf DragContent
            AddHandler dockContent.PanelText.MouseUp, AddressOf DropContent
            AddHandler dockContent.PanelText.MouseDown, AddressOf dockContent.PanelText_MouseDown
    Si j'essaie ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Dim dockContent As New DockContent()
            AddHandler dockContent.PanelText.MouseDown, AddressOf DragContent
            AddHandler dockContent.PanelText.MouseUp, AddressOf DropContent
            'AddHandler dockContent.PanelText.MouseDown, AddressOf dockContent.PanelText_MouseDown
    et bah DragContent et DropContent marchent..

    Qu'ai je oublié??
    J’ai des questions à toutes vos réponses!

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Points : 166
    Points
    166
    Par défaut
    salut,

    il doit y avoir une erreur ou une boucle dans ton handler dockContent.PanelText_MouseDown, on peut voir son code?

    comme ce handler est déclanché en premier (mouse down se produit avant mouse up) il empeche les autres de se déclencher... essai de mettre des stop dans ton code sur les deux handler de mouse down et regarde comment ils agissent.

    après c'est vrai que les mouse click et les drag drop c'est les events les plus chiant à corriger...

    zebrette

  4. #4
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Du coup j'ai zapper la methode PanelText_MouseDown pendant quelques jours puis j'ai essayé autrement et ca marche. Petite précision j'ai fait en sorte qu'on puisse deplacer la form avec l'evenement MouseMove sur un icone et non plus sur mon panel (mon controlBox):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
        Private Sub icoMove_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles icoMove.MouseMove
            Dim ico As PictureBox = sender
            Dim content As DockContent = ico.Parent.Parent
            If e.Button = Windows.Forms.MouseButtons.Left Then
     
                content.Dock = DockStyle.None
                Location = New Point(MousePosition.X - icoMove.Location.X - 15, MousePosition.Y - icoMove.Location.Y - 80)
     
            End If
        End Sub
    En tout cas merci pour ta réponse zebrette, il devait y avoir une c***** dans le paté au niveau de ma méthode PanelText_MouseDown! En fait ma méthode lancait une autre méthode que je ne connaissais pas (New IntPtr() je crois) (trouvée sur internet), qui marchait, mais pas totalement apparement.. Tandis que la c'est moi qu'à réfléchi :p

    Maintenant j'ai un autre soucis ^^ En fait j'instancie mes dockContents à partir de form de base, ou je copie les controls existants de la form dans le dockContent. Jusque la pas de soucis, mais je viens de réagir au fait que les controls sont copiés, leurs evenements aussi, mais pas les evenements liés a la form de base (form_load, form_close, etc..).
    Savez vous comment copier les evenements d'un control a un autre?
    (ex: form_load -> dockContent_load ^^)

    Je continue de chercher

    mic.carrer
    J’ai des questions à toutes vos réponses!

  5. #5
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Bonjour,

    Je reviens vers vous car j'avais réussi à contourner un problème auquel je n'avais pas de solution: le "drag" d'une form mdichildren et son "drop", en enlevant la bordure de la form puis en observant les events mousedown et mouseup sur un panel. Ca faisait une fenetre personnalisée qui m'allait très bien.

    Seulement je dois revenir sur fenetre type "windows" (contrainte professionnelle) et donc au drag & drop d'une mdichild.. Il y a bien les events locationchanged ou encore move pour le drag mais je n'arrive pas à trouver pour le drop..
    Est ce que quelqu'un pourrait m'aiguiller sur la marche à suivre (quels events je dois utiliser) ?
    J’ai des questions à toutes vos réponses!

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Eh bien pour ma part j'utilise trois événements, les standards je pense:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Private Sub OriginControl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles OriginControl.MouseDown
                sender.DoDragDrop(Objet a inclure dans le drop, DragDropEffects.Copy Or DragDropEffects.Move)
        End Sub
     
        Private Sub TargetControl_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TargetControl.DragOver
                e.Effect = DragDropEffects.Copy'/None...
        End Sub
     
        Private Sub TargetControl_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TargetControl.DragDrop
                'faire quelque chose, par exemple récupérer les objets du drop, coller...
        End Sub
    et il ne faut pas oublier d'activer le support du dragdrop sur les controles utilisés (AllowDrop ou quelquechose comme ca)

  7. #7
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Bonjour zebrette et merci pour ta réponse,

    oui je connais ces évènements la, je les ai utilisés pour des listbox, des treeview mais la ce que je voudrais c'est faire un drag and drop d'une form contenu dans un panel, ... et j'y arrive pas avec les events dont tu me parles (l'event mouse_down ne s'applique pas pour un click sur la titlebar).

    J'ai procédé autrement, en détectant directement les messages windows que recoit la form (en redefinissant la méthode WndProc):

    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
    Public Class FormContent
     
        Private IsMoving As Boolean = False
        Public Event FormDragged()
        Public Event FormDropped()
     
        Protected Overrides Sub WndProc(ByRef WndMsg As System.Windows.Forms.Message)
     
            If WndMsg.Msg = Messages.Constants.WM_MOVING And Not IsMoving Then
                IsMoving = True
                RaiseEvent FormDragged()
            ElseIf WndMsg.Msg = Messages.Constants.WM_EXITSIZEMOVE And IsMoving Then
                IsMoving = False
                RaiseEvent FormDropped()
            End If
     
            MyBase.WndProc(WndMsg)
        End Sub
     
    End Class
    Comme ca je detecte quand une form commence a bouger puis quand elle s'arrete.. un peu tordu mais ca marche.
    Si vous avez une autre solution, je suis toujours preneur!
    J’ai des questions à toutes vos réponses!

Discussions similaires

  1. Positionner UserControl dans un dock panel
    Par sadem dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 15/08/2010, 16h42
  2. [PHP 5.0] [Aide] Sécuriser panel Administration
    Par dexter74 dans le forum Langage
    Réponses: 8
    Dernier message: 20/01/2010, 11h34
  3. Créer un 'panel' à l'aide d'une feuille de style
    Par Daimonji dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 07/12/2006, 10h10
  4. [C++/CLI] Dock Panel VS2005
    Par BOUBOU81 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 01/08/2006, 08h20
  5. [vb.net] docking & panel
    Par AP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2006, 14h02

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