Kreslení na picBox
PictureBox
Pro vložení obrázku do formu se používá prvek
PictireBox. Pro jeden nebo dva obrázky stačí.
V případě, že potřebujeme vykreslit něco náročnějšího, využijeme
Graphics.
Na formulář umístíme jeden
PictureBox a na jeho plátno budeme vykreslovat to, co potřebujeme.
Tento příklad je z webu itnetwork.cz, který byl super, než začaly články zpřístupňovat za body nebo peníze.
Form:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Editor_bludiště
{
public partial class FormEditor : Form
{
Mapa mapa;
public FormEditor()
{
InitializeComponent();
mapa = new Mapa(16, 16);
}
private void mapaPictureBox_Paint(object sender, PaintEventArgs e)
{
mapa.Vykresli(e.Graphics, Convert.ToInt32(numericUpDown1.Value));
}
private void prekresliMapu()
{
mapaPictureBox.Size = new Size(mapa.Sirka * Convert.ToInt32(numericUpDown1.Value) + 1, mapa.Vyska * Convert.ToInt32(numericUpDown1.Value) + 1);
mapaPictureBox.Refresh();
}
private void FormEditor_Load(object sender, EventArgs e)
{
prekresliMapu();
comboBox1.SelectedIndex = 0;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
prekresliMapu();
}
private void mapaPictureBox_MouseClick(object sender, MouseEventArgs e)
{
int hrana = Convert.ToInt32(numericUpDown1.Value);
int x = e.X / hrana;
int y = e.Y / hrana;
// Hodnoty v pořadí, jako jsou popisky políček v ComboBoxu
int[] hodnoty = { 1, 99, 100, 0 };
// Kontrola správnosti souřadnic
if ((x >= 0) && (y >= 0) && (x < mapa.Sirka) && (y < mapa.Vyska))
{
// Levé myšítko přidá zeď
if (e.Button == MouseButtons.Left)
mapa.policka[x, y] = hodnoty[comboBox1.SelectedIndex];
// Pravé myšítko vymaže zeď
if (e.Button == MouseButtons.Right)
mapa.policka[x, y] = 0;
prekresliMapu();
}
}
private void oProgramuToolStripMenuItem1_Click(object sender, EventArgs e)
{
MessageBox.Show("Editor k tutoriálu na 3D bludiště v C# XNA z programátorské sociální sítě www.devbook.cz");
}
}
}
Třída Mapa:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;
namespace Editor_bludiště
{
public class Mapa
{
public int[,] policka;
public int Sirka
{
get { return policka.GetLength(0); }
}
public int Vyska
{
get{ return policka.GetLength(1); }
}
public Mapa(int sirka, int vyska)
{
policka = new int[sirka, vyska];
}
public void Vykresli(Graphics g, int hrana)
{
// mřížka
for ( int j = 0; j <= Vyska; j++)
{
for ( int i = 0; i <= Sirka; i++)
{
g.DrawLine(Pens.Gray, new Point(0, j * hrana), new Point(Sirka * hrana - 1, j * hrana)); // -
g.DrawLine(Pens.Gray, new Point(i * hrana, 0), new Point(i * hrana, Vyska * hrana - 1)); // |
}
}
// Políčka
for ( int j = 0; j < Vyska; j++)
{
for ( int i = 0; i < Sirka; i++)
{
switch (policka[i, j])
{
// Zeď
case 1:
g.FillRectangle(Brushes.CornflowerBlue, i * hrana, j * hrana, hrana, hrana);
break;
// Start
cas 99:
g.FillEllipse(Brushes.GreenYellow, i * hrana, j * hrana, hrana, hrana);
g.DrawString("S", new Font("Arial", hrana / 2), Brushes.Green, i * hrana + (hrana / 6), j * hrana + (hrana / 6));
break;
// Cíl
case 100:
g.FillEllipse(Brushes.Purple, i * hrana, j * hrana, hrana, hrana);
g.DrawString("C", new Font("Arial", hrana / 2), Brushes.Red, i * hrana + (hrana / 6), j * hrana + (hrana / 6));
break;
}
}
}
}
}
}