Comment faire un bouton dans une forme ronde plutôt que le rectangle classique. P>
J'utilise WinForms (2.0) P>
7 Réponses :
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. P>
Premier faire une classe. Donnez-lui un nom: "Roundbutton".
Ensuite, écrivez le code directement comme ceci: puis, construisez votre application et fermez ceci. P> 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. P> P>
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
GraphicsPath p = new GraphicsPath(); p.AddEllipse(1, 1, button1.Width - 4, button1.Height - 4); button1.Region = new Region(p);
C'est la meilleure solution que je suppose. Pourquoi sur Terre est-ce que cette solution n'a pas beaucoup d'upvotes?
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>
OptionsMenu menu = new OptionsMenu(4, new Point(50, 50), Controls, new Size(20, 20), 40);
Controls.AddRange(new Control[]
{
menu
});
Qu'en est-il de 'gdi'?
Exemple de mise en œuvre: strong> p>
extension pour limiter le rayon de coin rond (* plage: 0-90) strong>
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"