I need to add a badge to a tab control at the top right corner. I have tried this and came up with this class
public class BadgeUtil
{
private static List<Control> controls = new List<Control>();
static public bool AddBadgeTo(Control ctl, string Text,int y,int x)
{
if (controls.Contains(ctl)) return false;
Badge badge = new Badge();
// badge.AutoSize = true;
badge.Size = new Size(20, 20);
badge.Text = Text;
badge.BackColor = Color.FromArgb(255,128,64);
controls.Add(ctl);
ctl.Controls.Add(badge);
SetPosition(badge, ctl,x,y);
return true;
}
static private void SetPosition(Badge badge, Control ctl,int x,int y)
{
badge.Location = new Point(x,
y);
}
class Badge : Label
{
Color BackColor = Color.SkyBlue;
Color ForeColor = Color.White;
Font font = new Font("Sans Serif", 9f);
public Action<Control> ClickEvent;
public Badge() { }
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillEllipse(new SolidBrush(Color.FromArgb(255,0,0)),
this.ClientRectangle);
e.Graphics.DrawString(Text, font, new SolidBrush(ForeColor), 3, 1);
}
protected override void OnClick(EventArgs e)
{
ClickEvent(this);
}
}
}
and used this way
BadgeUtil.AddBadgeTo(tabPage3, "3",0,120);
which is resulting to this un desired output. I would like my badge to be position on the blue circle of the tab control as shown in this image not where the badge is positioned.