控件扩展与设置
定义背景图片:
public class DataGridView背景 : DataGridView
{
protected override void PaintBackground(Graphics 绘图画面, Rectangle 绘制背景, Rectangle 绘制区域)
{
base.PaintBackground(绘图画面, 绘制背景, 绘制区域);
Bitmap[] 背景图 = new Bitmap[]
{
资源文件.美女, 资源文件.花, 资源文件.花2, 资源文件.花3, 资源文件.花4, 资源文件.花5, 资源文件.花6,
资源文件.欧美美女, 资源文件.欧美美女1, 资源文件.欧美美女2, 资源文件.欧美美女3, 资源文件.欧美美女4, 资源文件.欧美美女5,
资源文件.花7, 资源文件.花8, 资源文件.花9, 资源文件.花10, 资源文件.花11, 资源文件.花12, 资源文件.花13,
资源文件.欧美美女6, 资源文件.欧美美女7, 资源文件.欧美美女8, 资源文件.欧美美女9, 资源文件.欧美美女10, 资源文件.欧美美女11,
资源文件.花14, 资源文件.花15, 资源文件.花17, 资源文件.花18, 资源文件.花19, 资源文件.花20, 资源文件.花23
};//(int)this.Tag
绘图画面.DrawImage(背景图[(int)base.Tag % 背景图.Length], 绘制区域);
Rectangle 区域 = new Rectangle(绘制区域.X + 1, 绘制区域.Y + 1, 绘制区域.Width - 3, 绘制区域.Height - 3);
绘图画面.DrawRectangle(Pens.Red, 区域);
}
}
实例化:
DataGridView 背景图事件日历 = new DataGridView背景();
设置停靠容器和大小:
private void Form1_Load(object sender, EventArgs e)
{
背景图事件日历.Parent = this;
背景图事件日历.Dock = DockStyle.Fill;
背景图事件日历.Tag = DateTime.Now.Minute;
日历加载(DateTime.Now);
}
刷新背景(在定时中按分钟自绘):
this.BeginInvoke(new Action(() =>
{
if (DateTime.Now.Minute == 0 && DateTime.Now.Second == 1)
日历加载(DateTime.Now);/*每小时更新时辰因为0时日期变更时辰亦变更*/
if (DateTime.Now.Minute < 59 && DateTime.Now.Second == 0)
{
自定日历.Tag = DateTime.Now.Minute;
自定日历.Refresh();
}
}));
一些设置:
背景图事件日历.AllowUserToAddRows = false;
背景图事件日历.AllowUserToDeleteRows = false;
背景图事件日历.AllowUserToOrderColumns = false;
背景图事件日历.AllowUserToResizeColumns = false;
背景图事件日历.AllowUserToResizeRows = false;
背景图事件日历.ReadOnly = true;
背景图事件日历.RowHeadersVisible = false;
背景图事件日历.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
背景图事件日历.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
背景图事件日历.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
背景图事件日历.RowsDefaultCellStyle.WrapMode = (DataGridViewTriState.True);
背景图事件日历.DefaultCellStyle.SelectionBackColor = Color.Transparent;
背景图事件日历.DefaultCellStyle.SelectionForeColor = Color.Red;//.Blue.Gold
背景图事件日历.GridColor = Color.Lime;
背景图事件日历.CellClick += new DataGridViewCellEventHandler(背景图事件日历_CellClick);
2018-11-5:补充过去忘记的内容,还有一步就是把单元格的背景设为透明色,这样背景图才能显示出来,代码如下:
void 背景()
{
int 行 = 数据表.Rows.Count - 1, 列 = 数据表.Columns.Count - 1;
if (行 > 0) while (true )
{
数据列表.Rows[行].Cells[列].Style.BackColor = Color.Transparent;
if (--列 == 0) { if(--行 < 0) break; 列 = 数据表.Columns.Count - 1; }
}
}