如何实现按钮右上角带数字功能

从_零_开始 2014-05-04 08:57:46
如何实现按钮右上角带数字功能,如下图
...全文
1322 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
PaulyJiang 2014-05-15
  • 打赏
  • 举报
回复
引用 21 楼 m1654399928 的回复:
[quote=引用 13 楼 jiangfling 的回复:] 上面的数字图片是画的,如果要显示999你要放那么多图片?
我是要在代码上New一个label(注意不是拖到winform上),然后将new出来的label添加到指定的控件上,但 红色代码部分不起作用。如果是将label直接拖到form上就起作用,求解 下面是我的代码 void Addlabel() { var label= new LabelControl { AutoSize = false, Visible = false, Text = "消息", Size = new Size(43, 19) }; label.Paint += label_Paint; } void lc_Paint(object sender, PaintEventArgs e) { lc.Paint -= lc_Paint; lc.Font = new Font("Tahoma", 10F, FontStyle.Bold, GraphicsUnit.Point, 0); //只有这句代码起作用 Graphics g = e.Graphics; var font = new Font("Tahoma", 9F, FontStyle.Bold); g.FillEllipse(Brushes.OrangeRed, 10, 5, 15, 10); g.DrawString(ReplyMessageCount.ToString(), font, Brushes.Green, 10, 3); }[/quote] e.handled =true
assky124 2014-05-06
  • 打赏
  • 举报
回复
一张图片就够了


internal sealed class MessageNumberGraphics
{
private static Image __imgNumbers = null;
private static Dictionary<int, Image> _imgNumberDict = null;

static MessageNumberGraphics()
{
__imgNumbers = ResourceLoader.GetBitmap("MessageNumbers.png");
_imgNumberDict = new Dictionary<int, Image>();
for (int i = 0; i < 10; i++)
{
Image img = GetSingleNumberImage(i);
_imgNumberDict.Add(i, img);
}
}

public static Image GetMessageNumber(int number)
{
if (number >= 0)
{
int len = number.ToString().Length;
Bitmap bmp = new Bitmap((len + 1) * 10, 20);
using (Graphics g = Graphics.FromImage(bmp))
{
Image numberImage = GetNumberImage(number);
Image backImage = GetNumberBack(len);
g.DrawImage(backImage, Point.Empty);
g.DrawImage(numberImage, new Point(5, 0));
}
return bmp;
}
return null;
}

private static Image GetNumberBack(int len)
{
Bitmap bmp = new Bitmap((len + 1) * 10, 20);
using (Graphics g = Graphics.FromImage(bmp))
{
g.DrawImage(__imgNumbers, new Rectangle(0, 0, 10, 20), new RectangleF(0, 20, 10, 20), GraphicsUnit.Pixel);
g.DrawImage(__imgNumbers, new Rectangle(10, 0, (len - 1) * 10, 20), new Rectangle(10, 20, 80, 20), GraphicsUnit.Pixel);
g.DrawImage(__imgNumbers, new Rectangle(len * 10, 0, 10, 20), new Rectangle(90, 20, 10, 20), GraphicsUnit.Pixel);
}
return bmp;
}

public static Image GetNumberImage(int number)
{
if (number >= 0)
{
int len = number.ToString().Length;
Bitmap bmp = new Bitmap(10 * len, 20);
using (Graphics g = Graphics.FromImage(bmp))
{
for (int i = 0; i < len; i++)
{
int single = number % 10;
number = number / 10;
Image img = _imgNumberDict[single];
if (img != null)
{
g.DrawImage(img, new Rectangle(10 * (len - 1 - i), -1, img.Width, img.Height));
}
}
}
return bmp;
}
return null;
}

private static Image GetSingleNumberImage(int number)
{
if (number >= 0 && number < 10)
{
Bitmap bmp = new Bitmap(10, 20);
using (Graphics g = Graphics.FromImage(bmp))
{
g.DrawImage(__imgNumbers, new Point(-number * 10, 0));
}
return bmp;
}
return null;
}
}
EdsionWang 2014-05-06
  • 打赏
  • 举报
回复
你new出来的label visible=false了啊
Mit1208 2014-05-05
  • 打赏
  • 举报
回复
图片需要哪个动态加载哪个。
zzyhost 2014-05-05
  • 打赏
  • 举报
回复
DrawImage + DrawString 啦!!!!!!!!设置背景图片啦!!!!如此简单啦!!!
灵雨飘零 2014-05-05
  • 打赏
  • 举报
回复
背景图片+文字。文字是从系统取的数值。有的话显示图片,没有显示默认图片。
从_零_开始 2014-05-05
  • 打赏
  • 举报
回复
引用 22 楼 andywangguanxi 的回复:
是不是得重写一下onpaint事件?明天试试~~
我是直接在代码上new一个label控件。 如果要重写onPaint事件还得先其它地方先重写label,然后再调用。这个我也试了,好像没用
PaulyJiang 2014-05-05
  • 打赏
  • 举报
回复
上面的数字图片是画的,如果要显示999你要放那么多图片?
EdsionWang 2014-05-05
  • 打赏
  • 举报
回复
是不是得重写一下onpaint事件?明天试试~~
jimil 2014-05-05
  • 打赏
  • 举报
回复
这个肯定是自定义控件,右上角背景固定,文字看传入自己生成到背景图中或是用另一控件写上去。
wfy4422 2014-05-05
  • 打赏
  • 举报
回复
自定义控件吧,右上角盖个Label背景红色,数字自己变
小恒丶 2014-05-05
  • 打赏
  • 举报
回复
一个按钮加一个图片 加一个文本 然后就没了
EdsionWang 2014-05-05
  • 打赏
  • 举报
回复
弄个红圈圈背景在哪,数字自己化上去。要不然真有几百几千个数字还真要几百几千个图了呢
dianjixue1 2014-05-05
  • 打赏
  • 举报
回复
这个就是有个背景图,中间放文本可以达到这个效果吧
从_零_开始 2014-05-05
  • 打赏
  • 举报
回复
引用 13 楼 jiangfling 的回复:
上面的数字图片是画的,如果要显示999你要放那么多图片?
我是要在代码上New一个label(注意不是拖到winform上),然后将new出来的label添加到指定的控件上,但 红色代码部分不起作用。如果是将label直接拖到form上就起作用,求解 下面是我的代码 void Addlabel() { var label= new LabelControl { AutoSize = false, Visible = false, Text = "消息", Size = new Size(43, 19) }; label.Paint += label_Paint; } void lc_Paint(object sender, PaintEventArgs e) { lc.Paint -= lc_Paint; lc.Font = new Font("Tahoma", 10F, FontStyle.Bold, GraphicsUnit.Point, 0); //只有这句代码起作用 Graphics g = e.Graphics; var font = new Font("Tahoma", 9F, FontStyle.Bold); g.FillEllipse(Brushes.OrangeRed, 10, 5, 15, 10); g.DrawString(ReplyMessageCount.ToString(), font, Brushes.Green, 10, 3); }
从_零_开始 2014-05-05
  • 打赏
  • 举报
回复
引用 18 楼 zhoumeiwen 的回复:
用画的方式呀
我是要在代码上New一个label(注意不是拖到winform上),然后将new出来的label添加到指定的控件上,但 红色代码部分不起作用。如果是将label直接拖到form上就起作用,求解 下面是我的代码 void Addlabel() { var label= new LabelControl { AutoSize = false, Visible = false, Text = "消息", Size = new Size(43, 19) }; label.Paint += label_Paint; } void lc_Paint(object sender, PaintEventArgs e) { lc.Paint -= lc_Paint; lc.Font = new Font("Tahoma", 10F, FontStyle.Bold, GraphicsUnit.Point, 0); //只有这句代码起作用 Graphics g = e.Graphics; var font = new Font("Tahoma", 9F, FontStyle.Bold); g.FillEllipse(Brushes.OrangeRed, 10, 5, 15, 10); g.DrawString(ReplyMessageCount.ToString(), font, Brushes.Green, 10, 3); }
从_零_开始 2014-05-05
  • 打赏
  • 举报
回复
引用 9 楼 andywangguanxi 的回复:
弄个红圈圈背景在哪,数字自己化上去。要不然真有几百几千个数字还真要几百几千个图了呢
我是要在代码上New一个label(注意不是拖到winform上),然后将new出来的label添加到指定的控件上,但 红色代码部分不起作用。如果是将label直接拖到form上就起作用,求解 下面是我的代码 void Addlabel() { var label= new LabelControl { AutoSize = false, Visible = false, Text = "消息", Size = new Size(43, 19) }; label.Paint += label_Paint; } void lc_Paint(object sender, PaintEventArgs e) { lc.Paint -= lc_Paint; lc.Font = new Font("Tahoma", 10F, FontStyle.Bold, GraphicsUnit.Point, 0); //只有这句代码起作用 Graphics g = e.Graphics; var font = new Font("Tahoma", 9F, FontStyle.Bold); g.FillEllipse(Brushes.OrangeRed, 10, 5, 15, 10); g.DrawString(ReplyMessageCount.ToString(), font, Brushes.Green, 10, 3); }
周美文 2014-05-05
  • 打赏
  • 举报
回复
用画的方式呀
whowhen21 2014-05-05
  • 打赏
  • 举报
回复
yanji19880228 2014-05-05
  • 打赏
  • 举报
回复
一个显示文本 一个显示圈圈 数字的话就根据你想要显示的内容实时放到圈圈里去显示不就完了么
加载更多回复(6)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧