[[:oktatas:programozás:csharp|< 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());
}
}