Traitée panel with border

  • jeudi 8 mars 2012 10:01
     
     

    Bonjour ,

    j'ai un panel1 situé dans un autre panel p .p a un scroll bar . je veux changer la bordure du panel1 en gris  alors j'ai ecris ce handler pour panel1:

    {e.Graphics.DrawRectangle(Pens.Silver,
                    e.ClipRectangle.Left,
                    e.ClipRectangle.Top,
                    e.ClipRectangle.Width - 1,
                    e.ClipRectangle.Height - 1);
                base.OnPaint(e);}


    ça avait l'air de marcher mais quand je monte ou descend le scroll bar de p , le deplacement du rectange que j'ai dessiné reste dans p ce qui me donne une zonne pleine de trait gris .

    est ce que quelqu'un peut m'aider ?

Toutes les réponses

  • jeudi 8 mars 2012 10:59
     
     

    wi je l'ai fais :

    panel1.Paint+=new System.Windows.Forms.PaintEventHandler(this.ArgumentGroup_Paint);

    mais le probléme est losque je "move the scroll bar " le deplacement du rectangle de bordure reste dessiné ce qui me donne plein de ligne

  • jeudi 8 mars 2012 11:00
    Auteur de réponse
     
     Traitée A du code

    Bonjour,

    Modifier votre code de la façon suivante :

                e.Graphics.DrawRectangle(Pens.Blue,
                    panel1.ClientRectangle.Left,
                    panel1.ClientRectangle.Top,
                    panel1.ClientRectangle.Width - 1,
                    panel1.ClientRectangle.Height - 1);
                base.OnPaint(e);

    Bien sur le handler dont vous parlez est celui de l'event Paint de panel1.

    L'explication de votre problème est la suivante : Le système ne refait l'opération Paint que pour la zone qui en a besoin (e.ClipRectangle)

    qui peut ne pes correspondre à la totalité du panel quand c'est juste un partie de celui ci était caché par une autre fenêtre.

    Cordialement.


  • jeudi 8 mars 2012 11:28
     
     
    merci ça marche :)
  • mercredi 14 mars 2012 15:54
     
     

    est ce qu'ilya un moyen de changer la couleur de bordure d'un groupBox ?

  • mercredi 14 mars 2012 16:02
    Modérateur
     
     

    Bonjour,

    Non, à part programmer le dessin du group box "à la main"

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0


  • mercredi 14 mars 2012 16:14
     
     
    j'ai essayé d'utiliser la meme fonction de paint mais estétiquement parlant c'est pas top . ya til un autre moyen de le faire?
  • mercredi 14 mars 2012 17:12
    Modérateur
     
     

    Bonjour,

    Vous pouvez utiliser la classe statique ControlPaint (http://msdn.microsoft.com/en-us/library/feaea5t8.aspx) qui vous permet de dessiner des éléments de Windows dans un objet Graphics. Regardez en particulier les méthodes DrawBorder() qui peut vous aider à dessiner une bordure.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

  • jeudi 15 mars 2012 08:13
     
     

    j'ai utilisé ce code :

    public class myGroupBox : GroupBox

        {

            private Color borderColor;

     

            public Color BorderColor

            {

                get { return this.borderColor; }

                set { this.borderColor = value; }

            }

     

            public myGroupBox()

            {

                this.borderColor = Color.Black;

            }

     

            protected override void OnPaint(PaintEventArgs e)

            {

                Size tSize = TextRenderer.MeasureText(this.Text, this.Font);

     

                Rectangle borderRect = e.ClipRectangle;

                borderRect.Y += tSize.Height / 2;

                borderRect.Height -= tSize.Height / 2;

                ControlPaint.DrawBorder(e.Graphics, borderRect, this.borderColor, ButtonBorderStyle.Solid);

     

                Rectangle textRect = e.ClipRectangle;

                textRect.X += 6;

                textRect.Width  = tSize.Width;

                textRect.Height = tSize.Height;

                e.Graphics.FillRectangle(new SolidBrush(this.BackColor), textRect);

                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), textRect);

            }

        }

     mais lorsque je monte ou descend le scroll bar du panel parent ilya redondance des traits du rectangle?

  • jeudi 15 mars 2012 09:41
     
     Traitée

    je l'ai reglé

    il suffisait de faire :

    GroupBox g=(GroupBox)this;

    Rectangle textRect = g.ClientRectangle;

    merci bien

    • Marqué comme réponse peythonet jeudi 15 mars 2012 09:41
    •