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

Windows Forms Discussion :

[VB.NET]créer des block


Sujet :

Windows Forms

  1. #21
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    voilà un petit exemple de solution en vb.net :
    http://s54.yousendit.com/d.aspx?id=1LJSPLYC40B1X2OU0JN1Q1PPRU

    c'est très loin d'etre parfait (j'ai fait ça vite) mais l'idée de départ est là !

    au départ tu as 2 controls vides qui s'échangent un panel de propriétés bien unique lui.

    donc tu peux mettre n'importe quoi au milieu..


    NB : pour alterner entre ancrage ou non , il faut double clicker sur le titre "Propriétés", je n'ai pas implémenté le test d'ancrage en fonction du déplacement.

  2. #22
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    désolé de te demander ça mais : est-ce que tu pourrais plustot le compresser en Zip (Je voudrais eviter d'installer de nouveau logiciels sur le PC du Boulot )?

    Comment fait-on pour qu'une fenetre soit devant les autres ?

  3. #23
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    voilà http://s52.yousendit.com/d.aspx?id=0E6R5CEEC6Z340ZI59PS7I3BEQ

    regarde la propriété topmost pour faire passer un formulaire devant les autres.

  4. #24
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    regarde la propriété topmost pour faire passer un formulaire devant les autres.
    => ce n'est pas bon car si tu as une autre appli qui est réduite dans ta barre des tache et qu'ensuite tu l'as mets en premier plan, la fenetre avec la propriété TopMost passera restera premier plan devant l'autre appli...

    voilà http://s52.yousendit.com/d.aspx?id=0E6R5CEEC6Z340ZI59PS7I3BEQ
    Sinon, je ne suis pas sure que ta methode soit la bonne... je pense qu'il faut rester sur un controle unique...il doit être plus facile d'encrer la fanetre mais je ne sais pas commment faire...

  5. #25
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    si vous me proposez mieux je suis pret à prendre..
    en attendant je pense que je suis sur la bonne piste et si j'ai le temps je finirai de coder ça.

  6. #26
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    il existe pas mal d'implémentation sur codeproject (mais elles utilisent pour la plupart des librairies qui ne sont pour la plupart pas gratuites).

    Reste qu'une Form n'est rien d'autres qu'un Control (dans le sens, cela hérite de Control). Rien n'interdit donc d'ajouter un control Form à la liste des controles d'une autre Form. Essayons ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public Form2()
    {
    	InitializeComponent();
    	Form1 f = new Form1();
            f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
    	f.TopLevel = false;
    	this.Controls.Add(f);
    	f.Show();
    }
    avec sur Form1, 2 boutons et leurs evenements associés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void button1_Click( object sender, EventArgs e )
    {
    	this.Dock = DockStyle.None;
     
    }
    private void button2_Click( object sender, EventArgs e )
    {
    	this.Dock = DockStyle.Right;
    }
    On arrive déjà à un résultat probant...

    ps : ce n'est qu'à titre d'exemple car implémenter une gestion complète du docking de controls reste à mon avis assez compliquée....

  7. #27
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    en VB.Net ce n'est pas faisable

    une form est un control de niveau 1 donc on ça plante lors du Me.Controls.Add(f)

    et je n'ai pas de propriété TopLevel ni de propriété Dock sur mes forms !

  8. #28
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    ?????????

  9. #29
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    avec VB.Net sur VS2003 en tout cas

  10. #30
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    C'est pareil pour moi (SharpDevelop 2.0 Beta + Framwork .Net 2.0)....

    par contre essayer ça : Me.AddOwnedForm(MaFeuilleDockable)

  11. #31
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Me.AddOwnedForm(MaFeuilleDockable)
    Je ne connaissais pas je vais essayer voir ce que ça fait.

    mais je suis parti sur une autre piste : faire un panel qui ressemble à une form lorsque la fenetre est flotante. ça marche tres bien.

    J'ai pas mal avancé pour le reste aussi. si je le fini je posterai le résultat histoire d'avoir vos avis.

    j'aimerai aussi voir vos solutions si vous bossez dessus.

  12. #32
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    moi je suis partis sur la fenetre floatante avec la propriété cité précédemment et en mettant FormBorderStyle = SizableToolWindow.
    Apres, je voulais mettre la propriété FormBorderStyle = None puis ajouter deux bouton (fermer et réduire) => le probleme actuel est d'arriver à ancrer la fenetre ...
    Mais je crois bien qu'il faut créer deux controles comme tu le disais => une fenetre floatante (comme je fais actuellement) et un panel ancré => l'avantage du panel ancré est qu'il permet d'acceuillir plusieurs fenetres en utilisant un affichage à base d'onglets...
    Mais je ne suis pas sure d'avoir un niveau en VB assez elevé pour le faire ... je cherche...l

  13. #33
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    c'est bon j'ai terminé de coder le système
    ça marche presque à l'identique comme sous VS2003

    par contre, comme j'aimerai le présenter en AP pour mon bts je garde mon code secret jusqu'à l'examen !
    8)

  14. #34
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    tu peux nous filer une version compiler pour voir comment ça réagit ?
    Ta gualerer pour le faire ? y a beaucoup de code ?
    Tu utilises un seul et même composant ou tu en as deux (un mobile et un fixe) ? ça s'utilise aussi simplement qu'un panel ?

    Je comprends toujours pas pourquoi il n'y a pas de composant gratuit qui faut ça alors que c'est utilisé dans un grands nombre d'application...

  15. #35
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    http://s52.yousendit.com/d.aspx?id=2EL6U84TF8EHM3O2QOXEYJ4W2V

  16. #36
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Pas mal du tout

    Quelques petites remarques pour ameliorer ton système :
    - il y a un probleme sur le rafraichissement : lorsque que tu angradis/reduit/deplace tes fenetre, on voit clairement les traces de deplacement => je pense qu'il faut utiliser le doublebuffering (mais je ne suis pas un specialiste dans le genre... d'ailleur en vb, je crois que je suis specialiste dans rien ).
    - Tu ne peux ancrer tes fenetres que par rapport aux bords de la fenetre principale : tu ne peux pas ancrer par rapport à une autre fenetre deja ancrée

    Par contre, le systeme d'ancrer en mettant la souris sur un bord de la fenetre principale est un peu depassé maintenant : si tu veux etre un peu plus "AWARE" regardes comment c'est gérer dans le "CLR Debugger" (c'est dans démarrer => tous les programmes => microsoft Framework .NET SDK v2.0 => Tools

    Bonne continuation...

  17. #37
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    je ne comprend pas tout bien.

    - il y a un probleme sur le rafraichissement : lorsque que tu angradis/reduit/deplace tes fenetre, on voit clairement les traces de deplacement => je pense qu'il faut utiliser le doublebuffering
    ça je crois que je vois. mais je ne vois pas du tout comment l'améliorer.

    Tu ne peux ancrer tes fenetres que par rapport aux bords de la fenetre principale
    alors non. le systeme ne marche pas du tout par rapport à la fenetre principale.
    en fait en mode design, j'ajoute des "barre d'ancrage" qui recoivent les boites à outils etc. Elles deviennent invisibles lorsque l'application demarre.
    Il se trouve que dans ma démo, elles sont dockés sur les bords d'une form mais rien n'empeche d'implémenter ces barres à l'intérieur d'un panel ou de n'importe quel conteneur situé n'importe ou dans une form.

    Ensuite je créé des objets virtuels correspondants chacun à une boite à outils. je lui associe un Nom, une Icone[optionnel] et un contenu[n'importe quel controle ou usercontrol- y compris nothing] que je veux voir afficher à l'interrieur.

    dans la form principale ça se traduit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private tbbo As New ToolBox("Boîte à outils", New UserControl1, New Bitmap(Application.StartupPath & "\outils.ico"))
        Private Sub MNUBoiteOutils_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MNUBoiteOutils.Click
            tbbo.Afficher(ToolBoxDockBar1)
        End Sub
    la methode Afficher affiche selon le dernier mode employé (flottant ou ancré) dans le conteneur de la Barre d'ancrage passée en parametre.

    Il faut auparavant autoriser les Barres d'ancrage pour un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Sub frmTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
            tbbo.AutoriserToolBoxDockBar(ToolBoxDockBar1)
            tbbo.AutoriserToolBoxDockBar(ToolBoxDockBar2)
            tbbo.AutoriserToolBoxDockBar(ToolBoxDockBar3)
            tbbo.AutoriserToolBoxDockBar(ToolBoxDockBar4)
        End Sub
    cela permet d'autoriser certains ToolBox à s'ancrer sur certaines (au moins une) Barre d'ancrage

    Lorsqu'on déplace la boite dans le conteneur, il teste si on passe au dessus d'une barre invisible ou non. si oui on accepte l'ancrage. si non c'est flotant

    la DLL fait en tout 7 classes dont 2 sont manipulables de l'exterieur : la barre et l'objet virtuel de boite à outils
    les autres classes privées sont les buttons de la barre,la représentation de la boite à outil en panel flottant, en panel ancré, en panel rétractable, l'ombre lors du déplacement et des localisateurs de barre d'ancrage.

    Les méthodes accessibles de l'objet virtuel de boite à outils :
    - des surcharges de New
    - Afficher
    - AfficherDocké
    - AfficherFlottant
    - AutoriserBarre
    - Retirer
    Propriétés pouvant etre modifiees :
    - Nom
    - Control
    - Icone

    La methode retirer ne détruit pas l'objet, il détruit juste sa méthode d'affichage en cours.
    si on le re-affiche via la methode afficher, il viendra se replacer aux dernieres coordonnées utilisées car tout celà est stocké dans l'objet virtuel.

    voilà.

    Par contre, le systeme d'ancrer en mettant la souris sur un bord de la fenetre principale est un peu depassé maintenant : si tu veux etre un peu plus "AWARE" regardes comment c'est gérer dans le "CLR Debugger" (c'est dans démarrer => tous les programmes => microsoft Framework .NET SDK v2.0 => Tools
    j'ai pas trop compris

  18. #38
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    heu j'arrive un peu aprés la guerre mais c'est pas ça que tu cherches à faire ?

    http://sourceforge.net/projects/dockpanelsuite/



  19. #39
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    ben ouais mais bon , ça y est c'est fait.. on a posé la question si ça existait déjà en gratuit et personne ne semblait savoir..

  20. #40
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    ça je crois que je vois. mais je ne vois pas du tout comment l'améliorer.
    => essaye de mettre se code dans ton composant (juste apres MyBase.New):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.UserPaint Or ControlStyles.AllPaintingInWmPaint , True)
    	    SetStyle(ControlStyles.ResizeRedraw, True) 'le controle est redissiné lors de son redimensionnement
    ou regarde l'attribut "DoubleBuffered" de ta fenetre principale

    j'ai pas trop compris
    => regades comment fonctionne le systeme que Neo51 a filé => lorsque tu deplace une fenetre, un systeme de fleche apparait pour docker tes fenetres : ça c'est le systeme de dockage "derniere generation"

Discussions similaires

  1. [VB.Net]Créer des liens entre plusieurs formulaires?
    Par Unreal Time dans le forum VB.NET
    Réponses: 6
    Dernier message: 23/12/2010, 09h25
  2. créer des blocks
    Par kadjuv dans le forum Simulink
    Réponses: 2
    Dernier message: 02/03/2010, 20h03
  3. Créer des rapports RDLC en vb.net
    Par shirya dans le forum VB.NET
    Réponses: 2
    Dernier message: 01/08/2008, 14h58
  4. [B.NET][ADO.NET] Créer des composants à la volée
    Par DotNET74 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/12/2007, 15h31
  5. Réponses: 6
    Dernier message: 21/08/2006, 10h01

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