none
Bordas arredondadas RRS feed

  • Pergunta

  • Como eu consigo deixar as bordas dos meu componentes arredondadas?

    Por exemplo, deixar um botão com bordas arredondadas, ou um panel, entre outros

    quinta-feira, 9 de novembro de 2017 20:19

Respostas

  • Você precisa extender o componente e sobrescrever o método OnPaint, fazendo a devida implementação.

    Exemplo para botões: 

    class RoundedButton : Button
    {
       GraphicsPath GetRoundPath(RectangleF Rect, int radius)
       {
          float r2 = radius / 2f;
          GraphicsPath GraphPath = new GraphicsPath();
    
          GraphPath.AddArc(Rect.X, Rect.Y, radius, radius, 180, 90);
          GraphPath.AddLine(Rect.X + r2, Rect.Y, Rect.Width - r2, Rect.Y);
          GraphPath.AddArc(Rect.X + Rect.Width - radius, Rect.Y, radius, radius, 270, 90);
          GraphPath.AddLine(Rect.Width, Rect.Y + r2, Rect.Width, Rect.Height - r2);
          GraphPath.AddArc(Rect.X + Rect.Width - radius, 
                           Rect.Y + Rect.Height - radius, radius, radius, 0, 90);
          GraphPath.AddLine(Rect.Width - r2, Rect.Height, Rect.X + r2, Rect.Height);
          GraphPath.AddArc(Rect.X, Rect.Y + Rect.Height - radius, radius, radius, 90, 90);
          GraphPath.AddLine(Rect.X, Rect.Height - r2, Rect.X, Rect.Y + r2);
    
          GraphPath.CloseFigure();
          return GraphPath;
       }
    
       protected override void OnPaint(PaintEventArgs e)
       {
          base.OnPaint(e);
          RectangleF Rect = new RectangleF(0, 0, this.Width, this.Height);
          GraphicsPath GraphPath = GetRoundPath(Rect, 50);
    
          this.Region = new Region(GraphPath);
          using (Pen pen = new Pen(Color.CadetBlue, 1.75f))
          {
              pen.Alignment = PenAlignment.Inset;
              e.Graphics.DrawPath(pen, GraphPath);
          }
       }
    }

    Ref: https://stackoverflow.com/a/28486964/1184708


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 10 de novembro de 2017 14:24

Todas as Respostas

  • Ola guilhermetgsm

    Tudo bem contigo?

    Estudaremos a sua questão e em breve traremos alguma solução.

    Atenciosamente,


    Guilherme Macedo S

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    Technet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 10 de novembro de 2017 12:47
    Moderador
  • Você precisa extender o componente e sobrescrever o método OnPaint, fazendo a devida implementação.

    Exemplo para botões: 

    class RoundedButton : Button
    {
       GraphicsPath GetRoundPath(RectangleF Rect, int radius)
       {
          float r2 = radius / 2f;
          GraphicsPath GraphPath = new GraphicsPath();
    
          GraphPath.AddArc(Rect.X, Rect.Y, radius, radius, 180, 90);
          GraphPath.AddLine(Rect.X + r2, Rect.Y, Rect.Width - r2, Rect.Y);
          GraphPath.AddArc(Rect.X + Rect.Width - radius, Rect.Y, radius, radius, 270, 90);
          GraphPath.AddLine(Rect.Width, Rect.Y + r2, Rect.Width, Rect.Height - r2);
          GraphPath.AddArc(Rect.X + Rect.Width - radius, 
                           Rect.Y + Rect.Height - radius, radius, radius, 0, 90);
          GraphPath.AddLine(Rect.Width - r2, Rect.Height, Rect.X + r2, Rect.Height);
          GraphPath.AddArc(Rect.X, Rect.Y + Rect.Height - radius, radius, radius, 90, 90);
          GraphPath.AddLine(Rect.X, Rect.Height - r2, Rect.X, Rect.Y + r2);
    
          GraphPath.CloseFigure();
          return GraphPath;
       }
    
       protected override void OnPaint(PaintEventArgs e)
       {
          base.OnPaint(e);
          RectangleF Rect = new RectangleF(0, 0, this.Width, this.Height);
          GraphicsPath GraphPath = GetRoundPath(Rect, 50);
    
          this.Region = new Region(GraphPath);
          using (Pen pen = new Pen(Color.CadetBlue, 1.75f))
          {
              pen.Alignment = PenAlignment.Inset;
              e.Graphics.DrawPath(pen, GraphPath);
          }
       }
    }

    Ref: https://stackoverflow.com/a/28486964/1184708


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 10 de novembro de 2017 14:24