
怎么样使用c#窗体程序实现图片上红路灯倒计时这个数字的图案(不是数字而是数字的图案)呀!
解决方案
60
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
namespace WindowsFormsApplication3
{
public class LEDScreen : Control
{
private int _DotWidth = 10;
[Description("点阵的大小")]
public int DotWidth {
get { return _DotWidth; }
set {
if (value < 0) throw new ArgumentException("点宽度必须大于0");
_DotWidth = value;
this.Width = 0;
this.Invalidate();
}
}
private Size _ScreenSize = new Size(10, 10);
[Description("屏幕分辨率")]
public Size ScreenSize {
get { return _ScreenSize; }
set {
if (value.Width < 0 || value.Height < 0)
throw new ArgumentException("无效的屏幕尺寸");
_ScreenSize = value;
_Swith = new bool[value.Width, value.Height];
this.Width = 0; //触发 SetBoundsCore 函数
this.Invalidate();
}
}
private Color _LigthColor = Color.Red;
[Description("亮灯的颜色")]
public Color LigthColor {
get { return _LigthColor; }
set {
_LigthColor = value;
this.Invalidate();
}
}
private Color _GrayColor = Color.Gray;
[Description("灭灯的颜色")]
public Color GrayColor {
get { return _GrayColor; }
set {
_GrayColor = value;
this.Invalidate();
}
}
private bool[,] _Swith = new bool[10, 10];
public bool[,] Swith {
get { return _Swith; }
}
public LEDScreen() {
this.BackColor = Color.Black;
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
using (SolidBrush sb = new SolidBrush(this._GrayColor)) {
for (int x = 0; x < this._ScreenSize.Width; x++) {
for (int y = 0; y < this._ScreenSize.Height; y++) {
sb.Color = this._Swith[x, y] ? this._LigthColor : this._GrayColor;
g.FillEllipse(sb, x * this._DotWidth, y * this._DotWidth, this._DotWidth, this._DotWidth);
}
}
}
base.OnPaint(e);
}
//代码控制控件的大小
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) {
width = this._ScreenSize.Width * this._DotWidth + 1;
height = this._ScreenSize.Height * this._DotWidth + 1;
base.SetBoundsCore(x, y, width, height, specified);
}
}
}

闲来无事做 打个酱油 做了一下你这个东西 本人参考把实现方式太多了