Tartalomjegyzék

< CSharp

Windows.Forms és grafika

Vonal rajzolása

using System;
using System.Drawing;
using System.Windows.Forms;
 
public class Form1 : Form
{
        Button gomb = new Button();
 
        public Form1()
        {
                gomb.Text = "Kattints ide";
                gomb.Location = new Point(112, 50);
                gomb.Click += new EventHandler(Button_Click);
                Controls.Add(gomb);
 
                this.Paint += new PaintEventHandler(Form1_Paint);
        }
 
        static public void Main()
        {
                Application.Run(new Form1());
        }
 
        private void Button_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Gomb lenyomva");
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
                Graphics g = this.CreateGraphics();
                Pen toll = new Pen(Color.Red, 5);  // Ecset színe és vastagsága
                g.DrawLine(toll, 20, 20, 200, 210);
        }
}
g.DrawLine(toll, x1, y1, x2, y2);

Az x1 és y1 a kezdőpont koordinátái. Az x2 és a y2 a végpont koordinátái.

Körök, ellipszisek rajzolása

using System;
using System.Drawing;
using System.Windows.Forms;
 
public class Form1 : Form
{
        Button gomb = new Button();
 
        public Form1()
        {
                gomb.Text = "Kattints ide";
                gomb.Location = new Point(112, 50);
                gomb.Click += new EventHandler(Button_Click);
                Controls.Add(gomb);
 
                Paint += new PaintEventHandler(Rajzolas);
        }
 
        static public void Main()
        {
                Application.Run(new Form1());
        }
 
        private void Button_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Gomb lenyomva");
        }
 
        private void Rajzolas(object sender, PaintEventArgs e)
        {
                Graphics g = this.CreateGraphics();
                Pen toll = new Pen(Color.Red, 5);  // Toll színe és vastagsága
                Rectangle rajzTerulet = new Rectangle(300, 50, 50,80);	
                g.DrawEllipse(toll, rajzTerulet);
        }
}

Az ellipszist a köré írható téglalap határozza meg.

A téglalap megadásnál a Rectangle konstruktor a következő paraméterekkel rendelkezik:

Rectangle(x, y, szélesség, magasság);

A x,y a téglalap bal felső sarka.

Ha a rajzTerulet objektumot felakarjuk újra használni, a méreteit és a helyét újraállíthatjuk:

rajzTerulet.Location = new Point(50, 50);
rajzTerulet.Size = new Size(50, 50);

Téglalap rajzolása

using System;
using System.Drawing;
using System.Windows.Forms;
 
public class Form1 : Form
{
        Button gomb = new Button();
 
        public Form1()
        {
                gomb.Text = "Kattints ide";
                gomb.Location = new Point(112, 50);
                gomb.Click += new EventHandler(Button_Click);
                Controls.Add(gomb);
 
                this.Paint += new PaintEventHandler(Form1_Paint);
        }
 
        static public void Main()
        {
                Application.Run(new Form1());
        }
 
        private void Button_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Gomb lenyomva");
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
                Graphics g = this.CreateGraphics();
                Pen toll = new Pen(Color.Red, 5);  // Toll színe és vastagsága
 
                Rectangle rajzTerulet = new Rectangle(20, 20, 250, 200);
                g.DrawRectangle(toll, rajzTerulet);
        }
}

Kitöltés

Ha Draw helyett Fill előtagú utasításokat használunk, akkor az adott alakzat kitöltődik. A kitöltött alakzathoz viszont nem toll, hanem ecset kell.

using System;
using System.Drawing;
using System.Windows.Forms;
 
public class Form1 : Form
{
        public Form1()
        {
		Width = 800;
		Height = 600;
 
                Paint += new PaintEventHandler(Rajzol);
        }
 
        static public void Main()
        {
                Application.Run(new Form1());
        }
 
        private void Rajzol(object sender, PaintEventArgs e)
        {
                Graphics g = this.CreateGraphics();
		SolidBrush ecset = new SolidBrush(Color.Blue);
 
		Rectangle rajzTerulet = new Rectangle(300, 50, 50,80);			
		g.FillEllipse(ecset, rajzTerulet);				
        }
}

Sokszög és 2D rajz

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
public class Form1 : Form
{
        Button gomb = new Button();
 
        public Form1()
        {
                gomb.Text = "Kattints ide";
                gomb.Location = new Point(112, 50);
                gomb.Click += new EventHandler(Button_Click);
                Controls.Add(gomb);
 
                this.Paint += new PaintEventHandler(Form1_Paint);
        }
 
        static public void Main()
        {
                Application.Run(new Form1());
        }
 
        private void Button_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Gomb lenyomva");
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
                Graphics g = this.CreateGraphics();
 
		Pen toll1 = new Pen(Color.Tomato,3);
 
                //Szagatott vonalas görbe rajzolása
                toll1.DashStyle = DashStyle.Dot;
                g.DrawPie(toll1,90,80,140,40,120,100);
 
 
		Pen toll2 = new Pen(Color.Maroon,4);
		//Sokszög rajzolása
                g.DrawPolygon(toll2,new Point[] {
                        new Point(30,140),
                        new Point(270,250),
                        new Point(110,240),
                        new Point(200,170),
                        new Point(70,350),
                        new Point(50,200)
                });
 
        }
}

Színátmenet

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
public class Form1 : Form
{
        Button gomb = new Button();
 
        public Form1()
        {
                gomb.Text = "Kattints ide";
                gomb.Location = new Point(112, 50);
                gomb.Click += new EventHandler(Button_Click);
                Controls.Add(gomb);
 
                this.Paint += new PaintEventHandler(Form1_Paint);
        }
 
        static public void Main()
        {
                Application.Run(new Form1());
        }
 
        private void Button_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Gomb lenyomva");
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
 
                Graphics g = this.CreateGraphics();
 
                // ellipszis téglalap és színátmenetes ecset 
                Rectangle rajzTerulet = new Rectangle( 5, 35, 30, 100 );
                LinearGradientBrush linearisSzinatmenetEcset =
                        new LinearGradientBrush ( rajzTerulet, Color.Blue,
                                                  Color.Yellow, LinearGradientMode.ForwardDiagonal );
 
                // ellipszis rajzolása kitöltve kék-sárga színátmenettel
                g.FillEllipse( linearisSzinatmenetEcset, 5, 30, 60, 100 );
 
        }
}

Antialias

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
class Program : Form
{
	Program()
	{
		Width=800;
		Height=600;
		Paint += new PaintEventHandler(Rajzol);
	}
	static void Main()
	{
		Application.Run(new Program());
	}
	private void Rajzol(object sender, PaintEventArgs e)
	{
		Graphics g = e.Graphics;
		g.SmoothingMode = SmoothingMode.AntiAlias;
		Pen toll = new Pen(Color.Blue, 5);
		g.DrawEllipse(toll, 100, 100, 120, 80);
		g.SmoothingMode = SmoothingMode.Default;
		g.DrawEllipse(toll, 250, 100, 120, 80);
	}
}

Szöveg rajzolása

Szöveg normál módon, vízszintesen

using System;
using System.Drawing;
using System.Windows.Forms;
 
class Program : Form
{
	Program()
	{
 
		Width = 800;
		Height = 600;
		Paint += new PaintEventHandler(Rajzol);
	}
	private void Rajzol(object sender, PaintEventArgs e)
	{
		Graphics g = CreateGraphics();
		SolidBrush ecset = new SolidBrush(Color.Black);
		g.DrawString("Valami", new Font("Arial", 180), ecset, 50, 100);
	}
	public static void Main()
	{
		Application.Run(new Program());
	}
}

Szöveg függőlegesen

using System;
using System.Drawing;
using System.Windows.Forms;
 
class Program : Form
{
	Program()
	{
 
		Width = 800;
		Height = 600;
		Paint += new PaintEventHandler(Rajzol);
	}
	private void Rajzol(object sender, PaintEventArgs e)
	{
		Graphics g = CreateGraphics();
		SolidBrush ecset = new SolidBrush(Color.Black);
		StringFormat forma = new StringFormat();
		forma.FormatFlags = StringFormatFlags.DirectionVertical;
		g.DrawString("Valami", new Font("Arial", 120), ecset, 50, 100, forma);
	}
	public static void Main()
	{
		Application.Run(new Program());
	}
}

Vegyük észre, hogy egy plusz osztályt kellet betenni. Ez a StringFormat. Annak beállítottuk a FormatFlags tulajdonságát. A tulajdonság lehetséges értékei a StringFormatFlags felsorolt típusból van.

Rajzolás alternatív módon

Eddig mindig úgy dolgoztunk ha rajzolni akartunk, hogy az ablak Paint eseményéhez rendeltünk egy rajzoló metódust. Úgy is rajzolhatunk egy ablakra, ha a már meglévő OnPaint metódusát felülírjuk:

using System;
using System.Drawing;
using System.Windows.Forms;
 
class Program : Form
{
	Program()
	{
 
		Width = 800;
		Height = 600;
	}
	protected override void OnPaint(PaintEventArgs e)
	{
		Graphics g = CreateGraphics();		
		Pen toll = new Pen(Color.Blue, 5);
		g.DrawRectangle(toll, 50, 50, 100, 100);
	}
	public static void Main()
	{
		Application.Run(new Program());
	}
}