그 위에 페인트 :그리드와의 PictureBox에 CellPaint 이벤트를 추가 내가이 같이있는 PictureBox에 격자 생성
private void PictureBoxPaint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
int numOfCellsWidth = 50;
int numOfCellsHeight = 600;
int cellSize = 20;
Pen p = new Pen(Color.Black);
for (int y = 0; y < numOfCellsHeight; ++y)
{
g.DrawLine(p, 0, y * cellSize, numOfCellsHeight * cellSize, y * cellSize);
}
for (int x = 0; x < numOfCellsWidth; ++x)
{
g.DrawLine(p, x * cellSize, 0, x * cellSize, numOfCellsHeight * cellSize);
}
}
내가 전에 tableLayoutPanel과 협력하고 배열 목록에 바인딩 할 수있는 CellPaint 이벤트가있어서 목록이 변경 될 때 셀의 색이 변경됩니다. 이것이 내가 가진 것입니다.
private void tableLayoutPanelMainGrid_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (mainVisualization.mainGrid != null)
if (mainVisualization.mainGrid.cellList != null)
using (var b = new SolidBrush(mainVisualization.mainGrid.cellList[e.Column, e.Row].color))
e.Graphics.FillRectangle(b, e.CellBounds);
}
어떻게이 두 가지를 결합 할 수 있습니까?
당신은 당신의 PictureBoxPaint() 메소드에 자신 CellPaint 이벤트를 발생 할 수있다. 자신의 컨트롤 클래스를 만들 때 가장 잘 작동하도록하는 대신 PictureBox를 기본 클래스로 만들고 OnPaint()를 재정의하면됩니다. 또한 많은 이벤트 핸들러 호출을 고려해야합니다. 대신 비트 맵을 그리는 옵션을 무시해서는 안됩니다. –
비트 맵을 목록에 어떻게 바인딩 할 수 있습니까? 목록이 변경 될 때마다 픽처 박스의 비트 맵을 다시 그려야 할 것입니다. 제 경우에는 아마 느려질 것입니다 (테트리스 게임을 만들고 있습니다). –