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 :

[C# 3] Redimensionner un UserControl


Sujet :

Windows Forms

  1. #1
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut [C# 3] Redimensionner un UserControl
    Bonjour,

    Voici mon souci : j'arrive très bien à déplacer un UserControl sur un panel, mais j'ai des bugs avec le redimensionnement... Malgré un calcul simple genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     private void statusStrip_MouseMove(object sender, MouseEventArgs e)
            {
                if (_mouseDown)
                {
                    this._diff.X = Cursor.Position.X - this.ActualLocation.X;
                    this._diff.Y = Cursor.Position.Y - this.ActualLocation.Y;
     
                    this.Width = this._size.X + this._diff.X;
                    this.Height = this._size.Y + this._diff.Y;
                }
            }
    Le redimensionnement s'effectue correctement si je me déplace lentement avec la souris. Par contre , j'ai des clignotements assez gênants... Et si je vais trop vite, la souris sort du UserControl et le redimensionnement cesse.. (alors que j'ai bien mis un _mouseDown à false sur le MouseUp).

    Bref, pleins de petits bugs.
    Donc, ma question : quelqu'un aurait-il un code rangé par la pour redimensionner un composant, ou UserControl sur une Winform ou Panel ?

    Et si possible sans utiliser les API

    MErci pour votre aide,
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour les clignotements, je sais pas trop... tu pourrais peut-être essayer de faire un SuspendLayout au début du redimensionnement et ResumeLayout à la fin, mais je suis pas sûr de ce que ça donnerait...
    Pour ce qui est du déplacement trop rapide, essaie de positionner la propriété Capture du statusStrip à true, pour qu'il continue à capturer les mouvements de la souris quand elle sort (attention, cette propriété se remet souvent à false toute seule... il faut la mettre à true au début du redimensionnement je pense)

  3. #3
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    Ok je vais essayer ça... sinon j'ai vu qu'avec les classes du Designer on peut avoir un comportement identique au Designer de Visual Studio, ce qui résoudrait définitivement le problème.

    Par contre le code est nettement plus chaud
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  4. #4
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    revoici le code de mon mousemove avec , tu remarqueras le capture = true au début du redimensionnement :

    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
     
     if (_mouseDown)
                {
                    this.statusStrip1.Capture = true;
     
                    //get the difference
                    _diff.X = Cursor.Position.X - _orig.X;
                    _diff.Y = Cursor.Position.Y - _orig.Y;
     
                    //change the width and height, 
                    //relative to the old size
                    Width = _size.X + _diff.X;
                    Height = _size.Y + _diff.Y;
     
     
                }
    Plus de clignotement et redimensionnement impec.

    Un mot : Merci
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    cool, j'étais pas du tout sûr que ça marcherait
    par contre j'aurais plutôt mis Capture = true dans le MouseDown, mais si ça marche...

  6. #6
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    je crois que c'est ce que j'avais fait au début... et effectivement ça marche,
    lors du 1er redimensionnement... Après si on sort et qu'on veut le refaire, j'ai
    l'impression que le capture se met sur false et ne veux plus passer à true.. bref y avait bug.

    sinon bon, pour les clignotements, au fur et à mesure que je rajoute des contrôles dans le UserControl, ça a tendance à recommencer, mais ça reste raisonnable...
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  7. #7
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    Pour se débarasser des clignotements essaye d'ajouter ceci dans le constructeur de ton contôle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.SetStyle(ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    XOR Onlava, Onlava

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redimensionner un usercontrol à l'intérieur d'un panel
    Par GCAccess dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/11/2010, 08h20
  2. [C#]Bloquer le redimensionnement d'un usercontrol
    Par ClaudeBg dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/02/2010, 19h43
  3. Réponses: 0
    Dernier message: 12/01/2009, 18h01
  4. Usercontrol redimensionné dans conteneur
    Par pink976 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/04/2008, 14h23
  5. Design-time : redimensionner un usercontrol
    Par Yoshio dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/04/2008, 10h08

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