Vấn đề nó hơi dài nên nói trong vài chữ không được. Túm lại vẫn phải load hình lên thôi.
Post lên đoạn code tạo cell nè. Xem chơi thôi nha 
Code:
public partial class ChessCellUI : UserControl
{
private static int CellSize = 64;
private ChessCell _Cell;
public ChessCell Cell
{
get { return _Cell; }
set { _Cell = value; }
}
private Color _ColorEffect = ColorManager.GetNoneColor();
public Color ColorEffect
{
get { return _ColorEffect; }
set {
_ColorEffect = value;
Invalidate();
}
}
public ChessCellUI()
{
InitializeComponent();
this.Size = new Size(CellSize, CellSize);
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
int sumPos = _Cell.Position.X + _Cell.Position.Y;
if (sumPos % 2 == 0)
{
g.DrawImage(ResourceManager.GetBlackImg(), 0, 0);
}
else
{
g.DrawImage(ResourceManager.GetWhiteImg(), 0, 0);
}
g.DrawString(_Cell.Position.X + "," + _Cell.Position.Y, this.Font, Brushes.Blue, 0, 0);
// if the cell have a piece
if(_Cell.Piece != null)
{
g.DrawImage(ResourceManager.GetPieceImg(_Cell.Piece), 0, 0, CellSize, CellSize);
}
if (_ColorEffect != ColorManager.GetNoneColor())
{
DrawColorEffect(g, _ColorEffect);
}
base.OnPaint(e);
}
public void DrawColorEffect(Graphics g, Color c)
{
Brush bru = new SolidBrush(c);
g.FillRectangle(bru, 0, 0, this.Width, this.Height);
g.DrawRectangle(new Pen(ColorManager.GetCellBorderColor()),
0, 0, this.Width - 1, this.Height - 1);
}
public delegate void MouseEnterHandler(ChessCellUI currCell);
public event MouseEnterHandler mouseEnterHandler;
public delegate void MouseLeaveHandler(ChessCellUI currCell);
public event MouseLeaveHandler mouseLeaveHandler;
public delegate void MouseDownHandler(ChessCellUI currCell);
public event MouseDownHandler mouseDownHandler;
protected override void OnMouseEnter(EventArgs e)
{
if (mouseEnterHandler != null)
mouseEnterHandler(this);
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
if (mouseLeaveHandler != null)
mouseLeaveHandler(this);
base.OnMouseLeave(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (mouseDownHandler != null)
mouseDownHandler(this);
base.OnMouseDown(e);
}
public void ClearCell()
{
_Cell.Piece = null;
Invalidate();
}
}