6
votes

Boutons de forme ronde

Comment faire un bouton dans une forme ronde plutôt que le rectangle classique.

J'utilise WinForms (2.0)


1 commentaires

Parlez-vous ASP.NET ou avez-vous des winforms? Si ce dernier, je n'ai aucune idée. Si le premier, il s'agit d'une question CSS, Google "CSS arrondi coins"


7 Réponses :


2
votes

Ceci ou Ce pourrait vous aider si vous devez implémenter votre propre classe de bouton en fonction du bouton Formulaires Windows par défaut. Vous pouvez également rechercher en ligne pour plus d'exemples.


0 commentaires

5
votes

Le projet de code a de nombreux articles sur ces types de choses, notamment l'article Roundbutton Windows Control - Les cercles réduits de tous les temps pourraient être intéressants car cela montre que vous devez faire différentes sortes de boutons ronds.


0 commentaires

33
votes

Premier faire une classe. Donnez-lui un nom: "Roundbutton". Ensuite, écrivez le code directement comme ceci: xxx

puis, construisez votre application et fermez ceci.

Allez maintenant à la boîte à outils et vous verrez un témoin Roundbutton. < / p>

puis faites glisser-la glisser sur votre formulaire Windows et testez-le.


3 commentaires

J'ai utilisé ce code, mais mon bouton a des coupures à gauche et en bas, quelqu'un peut-il aider avec ça?


@AYUSHBHARGAVA: La raison en est que la définition de la propriété de la région prend simplement le bouton ordinaire (y compris sa limite de couleur différente) et réduit tout ce qui est à l'extérieur du chemin donné, laissant quelques vestiges de la vieille limite. Vous devrez redessiner la limite de la forme vous-même (c'est-à-dire en dehors de la région, vous devrez dessiner une ellipse creuse, c'est un peu plus petite que la région). Voir: docs.microsoft.com/en-us/dotnet/api/...


Une solution simple consistera à définir la propriété Flottyle Roundbutton sur Flat et Bordersize à 0 sous propriété PlatApparence. Ensuite, il n'y a plus de coupes



6
votes
GraphicsPath p = new GraphicsPath();
p.AddEllipse(1, 1, button1.Width - 4, button1.Height - 4);
button1.Region = new Region(p);

1 commentaires

C'est la meilleure solution que je suppose. Pourquoi sur Terre est-ce que cette solution n'a pas beaucoup d'upvotes?



0
votes

C'est ce que vous voulez

public class RoundButton : Control
{
    private readonly Label lbl;
    public RoundButton() : base()
    {
        lbl = new Label
        {
            Text = Text,
            ForeColor = ForeColor,
            BackColor = BackColor,
            Font = Font
        };
        CenterInParent();
    }
    private void CenterInParent()
    {
        lbl.Left = (Width - lbl.Width) / 2;
        lbl.Top = (Height - lbl.Height) / 2;
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        GraphicsPath grPath = new GraphicsPath();
        grPath.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height);
        Region = new Region(grPath);
        base.OnPaint(e);
    }
    protected override void OnMove(EventArgs e)
    {
        CenterInParent();
        base.OnMove(e);
    }
    protected override void OnTextChanged(EventArgs e)
    {
        lbl.Text = Text;
        base.OnTextChanged(e);
    }
    protected override void OnForeColorChanged(EventArgs e)
    {
        lbl.ForeColor = ForeColor;
        base.OnForeColorChanged(e);
    }
    protected override void OnBackColorChanged(EventArgs e)
    {
        lbl.BackColor = BackColor;
        base.OnBackColorChanged(e);
    }
    protected override void OnFontChanged(EventArgs e)
    {
        lbl.Font = Font;
        base.OnFontChanged(e);
    }
}
  • pas de coupes p> li>

  • rond p> li> ul>

    contre: p>

    • Mauvais chargeur de concepteur pour le bouton rond LI> ul> p>


0 commentaires

0
votes
OptionsMenu menu = new OptionsMenu(4, new Point(50, 50), Controls, new Size(20, 20), 40);

Controls.AddRange(new Control[] 
{
    menu
});

0 commentaires