Home

Introduction aux pinceaux

 

Les Fondements de brosses

 

Introduction

Dans la leçon précédente, nous avons fait deux types de figures : les formes fermées et les formes axées sur la ligne. Ces chiffres ont requis un stylo pour montrer leur forme. La particularité des formes fermées est qu'elles peuvent être remplies, avec une couleur, une image ou un motif.

Un pinceau est un objet qui contient une couleur, une image ou un dessin modàle et qui est utilisé pour remplir l'intérieur d'une forme fermée. Cette définition signifie aussi qu'il existe différents types de brosses avec différents objectifs. Pour atteindre ces objectifs, le .NET Framework fournit l'appui pour les brosses dans différents espaces de noms avec différentes classes. La màre de toutes les brosses est la classe Brush définie dans l'espace de noms System.Drawing.

L'Utilisation d'un pinceau

Parce que la tche principale d'une brosse est de remplir une forme fermée, la classe Graphics fournit une méthode qui correspond à chacune des formes fermées que nous avons examinées pour dessiner dans la leçon précédente afin de les remplir. Les méthodes sont :

  • FillRectangle : utilisé pour remplir l'intérieur d'un rectangle ou un carré
  • FillRectangle : utilisé pour remplir l'intérieur d'une série de rectangles
  • FillEllipse : utilisé pour remplir l'intérieur d'une ellipse ou un cercle
  • FillPolygon : utilisé pour remplir l'intérieur d'un polygone
  • FillClosedCurve : utilisé pour remplir l'intérieur d'une courbe fermée
  • FillPie : utilisé pour remplir l'intérieur d'une tarte
  • FillPath : utilisé pour remplir l'intérieur d'un chemin graphique

Pour remplir une forme, appelez l'une de ces méthodes, passez une valeur de brosse, suivie de l'emplacement et des dimensions de la forme. Par exemple, si vous souhaitez dessiner un rectangle et le remplir avec une brosse, vous devez utiliser un code similaire à :

using System;  
using System.Drawing;  
using System.Windows.Forms;    
 
 
public class Exercise : Form  
{
	 public Exercise()      
	 {          
		 InitializeComponent();      
	 }        
 
 
	 void InitializeComponent()      
	 {          
		Paint += new PaintEventHandler(Exercise_Paint);      
	 }        
 
 
	 private void Exercise_Paint(object sender, PaintEventArgs e)      
	 {          
 
		 e.Graphics.FillRectangle(SomeBrush, 20, 20, 200, 160);      
	 }  
}    
 
public class Program  
{      
	 public static int Main()      
	 {          
		 Application.Run(new Exercise());            
 
	 	return 0;      
	 }  
}

Sur l'ensemble, il existe quatre types de brosses.

Les Brosses solides

 

Les Brosses de couleurs simples

Comme un stylo, la caractéristique principale d'une brosse est sa couleur. Pour vous aider à créer un pinceau simple, l'espace de noms System.Drawing fournit la classe statique de Brosses scellée. La seule caractéristique que cette classe fournit est la possibilité de spécifier une couleur à utiliser sur un pinceau. Comme une classe statique, vous n'avez jamais à l'instancier.

Pour créer un simple pinceau dont les seuls renseignements sont fournis par sa couleur, appelez la classe Brushes et qualifiez le nom de la classe pour accéder à une couleur. Chaque couleur est fournie par son nom comme une propriété. Voici un exemple d'utilisation de la classe :

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)  
{      
	 Point[] pt = { new Point(10,  22), new Point(188, 246),                            
			new Point(280, 192), new Point(250,  48) };        
 
 
	 e.Graphics.FillClosedCurve(Brushes.BlanchedAlmond, pt);      
	 e.Graphics.DrawClosedCurve(Pens.Blue, pt);  
}

Cela produirait :

Brush

 

ApplicationApplication : Dessin d'un cercle

  1. Démarrez une nouvelle Application Windows nommée RotatingCircles1
  2. Double-cliquez sur le milieu de la forme et modifiez le fichier comme suit :
    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 RotatingCircles1  
    {      
        public partial class Form1 : Form      
        {          
            Graphics graphDrawingArea;          
            Bitmap bmpDrawingArea;
     
            public Form1()          
            {              
                InitializeComponent();          
            }            
    
            private void Form1_Load(object sender, EventArgs e)          
            {              
                bmpDrawingArea = new Bitmap(Width, Height);              
                graphDrawingArea = Graphics.FromImage(bmpDrawingArea);          
            }      
        }  
    }
  3. Dans la section de composantes de la bote à outils, cliquez sur Timer et cliquez sur le formulaire
  4. Dans la fenêtre Propriétés, modifiez les valeurs suivantes :
    Enabled : true
    Interval : 20
  5. Sous la forme, double-cliquez sur l'objet timer1 et apportez les modifications suivantes :
    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 RotatingCircles1  
    {      
        public partial class Form1 : Form      
        {          
            Graphics graphDrawingArea;          
            Bitmap bmpDrawingArea;          
            static int mainRadius = 10;          
            static int smallRadius = 5;          
            static bool isMax;          
            static bool smallRadiusMax;            
     
            public Form1()          
            {              
                InitializeComponent();          
            }            
     
            private void Form1_Load(object sender, EventArgs e)          
            {              
                bmpDrawingArea = new Bitmap(Width, Height);              
                graphDrawingArea = Graphics.FromImage(bmpDrawingArea);          
            }            
     
            void DrawCentralCircle(int CenterX, int CenterY, int Radius)          
            {              
                 int start = CenterX - Radius;              
                 int end = CenterY - Radius;              
                 int diam = Radius * 2;                
     
     
                 graphDrawingArea.DrawEllipse(new Pen(Color.Blue),                            
                                start, end, diam, diam);          
            }            
    
            void DrawCornerCircle(int CenterX, int CenterY, int Radius)          
            {              
                 int start = CenterX - Radius;              
                 int end = CenterY - Radius;              
                 int diam = Radius * 2;                
    
                 graphDrawingArea.DrawEllipse(new Pen(Color.Red),                            
                                start, end, diam, diam);          
            }            
    
            private void timer1_Tick(object sender, EventArgs e)          
            {              
                Graphics graph = Graphics.FromHwnd(this.Handle);                
    
                int centerX = ClientRectangle.Width / 2;              
                int centerY = ClientRectangle.Height / 2;                
     
     
                if (isMax == true)                  
                    mainRadius--;              
                else                  
                    mainRadius++;                
    
                if (mainRadius > (ClientRectangle.Height / 2))                  
                    isMax = true;              
                if (mainRadius < 10)                  
                    isMax = false;                
     
                if (smallRadiusMax == true)                 
                     smallRadius--;              
                else                  
                     smallRadius++; 
                   
     
                if (smallRadius > 240)                  
                     smallRadiusMax = true;              
                if (smallRadius < 5)                  
                     smallRadiusMax = false;                
     
                graphDrawingArea.FillRectangle(Brushes.Black, 0, 0, Width, Height);                
                // Central              
                DrawCentralCircle(centerX, centerY, mainRadius);              
                // Top-Left              
                DrawCornerCircle(centerX / 2, centerY / 2, smallRadius);              
                // Top-Right              
                DrawCornerCircle(centerX + (centerX / 2), centerY / 2, smallRadius);              
                // Bottom-Left              
                DrawCornerCircle(centerX / 2, centerY + (centerY / 2), smallRadius);              
                // BottomRight              
                DrawCornerCircle(centerX + (centerX / 2),                       
                centerY + (centerY / 2), smallRadius);                
                graph.DrawImage(bmpDrawingArea, 0, 0);          
            }      
        }  
    }
  6. Exécutez l'application pour voir le résultat
     
    Rotating Circles
  7. Fermez le formulaire

La Création d'une brosse

Le type de brosse le plus simple est aussi appelé solide. Ce type de pinceau est simplement équipé d'une couleur et il est utilisé pour remplir une forme. Pour obtenir un pinceau solide, vous utilisez la classe SolidBrush définie dans l'espace de noms System.Drawing. Il a un seul constructeur déclaré avec la syntaxe suivante :

public SolidBrush(Color color);

La couleur passée comme argument doit être une définition valide d'une couleur. Voici un exemple :

private void Exercise_Paint(object sender, PaintEventArgs e)  
{          
        SolidBrush brushBlue = new SolidBrush(Color.Blue);            
 
 
        e.Graphics.FillRectangle(brushBlue, 20, 20, 200, 160);  
}

Cela produirait :

Brush

Si vous envisagez d'utiliser des couleurs différentes pour remplir des formes différentes, vous n'avez pas à créer une nouvelle brosse pour chaque forme. À tout moment, avant de réutiliser le même pinceau défini précédemment, vous pouvez simplement modifier sa couleur. Pour cette raison, la classe SolidBrush est équipée de la propriété Color. Voici un exemple d'utilisation :

private void Exercise_Paint(object sender, PaintEventArgs e)  
{          
		 SolidBrush colorizer = new SolidBrush(Color.Lime);          
		 e.Graphics.FillRectangle(colorizer, 10, 10, 120, 120);            
 
 
		 colorizer.Color = Color.Salmon;          
		 e.Graphics.FillRectangle(colorizer, 140, 10, 120, 120);            
 
 
		 colorizer.Color = Color.Aqua;          
		 e.Graphics.FillRectangle(colorizer, 10, 140, 120, 120);            
 
 
		 colorizer.Color = Color.Navy;          
		 e.Graphics.FillRectangle(colorizer, 140, 140, 120, 120);  
}

Cela produirait :

Solid Brushes

Comme la plupart des objets utilisés dans les graphiques de programmation, un pinceau consomme des ressources de l'ordinateur. Par conséquent, apràs l'avoir utilisé, vous pouvez libérer les ressources qu'il utilisait en appelant la méthode Dispose(). Voici un exemple :

private void Exercise_Paint(object sender, PaintEventArgs e)  
{          
		 SolidBrush colorizer = new SolidBrush(Color.Lime);          
		 e.Graphics.FillRectangle(colorizer, 10, 10, 120, 120);            
 
 
		 colorizer.Color = Color.Salmon;          
		 e.Graphics.FillRectangle(colorizer, 140, 10, 120, 120);            
 
 
		 colorizer.Color = Color.Aqua;          
		 e.Graphics.FillRectangle(colorizer, 10, 140, 120, 120);            
 
 
		 colorizer.Color = Color.Navy;          
		 e.Graphics.FillRectangle(colorizer, 140, 140, 120, 120);        
 
 
	 colorizer.Dispose();  
}

ApplicationApplication : Utilisation d'une brosse

  1. Démarrez une nouvelle Application Windows Forms nommée WeeklySales2
  2. Concevez le formulaire comme suit :

    Company Weekly Sales

    Control

    Name

    Text

    Other Properties

    Label

    Label

     

    Monday

     

    Label

    Label

     

    Tuesday

     

    Label

    Label

     

    Wednesday

     

    Label

    Label

     

    Thursday

     

    Label

    Label

     

    Friday

     

    TextBox

    TextBox

    txtMonday

    12000

    TextAlign : droit

    TextBox

    TextBox

    txtTuesday

    11000

    TextAlign : droit

    TextBox

    TextBox

    txtWednesday

    8500

    TextAlign : droit

    TextBox

    TextBox

    txtThursday

    16800

    TextAlign : droit

    TextBox

    TextBox

    txtFriday

    17500

    TextAlign : droit

    Button

    TextBox

    Generate

    btnGenerate

     

  3. Double-cliquez sur une zone inoccupée du formulaire et modifiez le fichier comme suit :
    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 WeeklySales2  
    {      
        public partial class Form1 : Form      
        {          
            Graphics graphDrawingArea;          
            Bitmap bmpDrawingArea;            
     
     
            public Form1()          
            {              
                InitializeComponent();          
            }            
     
     
            private void Form1_Load(object sender, EventArgs e)          
            {              
                bmpDrawingArea = new Bitmap(Width, Height);              
                graphDrawingArea = Graphics.FromImage(bmpDrawingArea);          
            }      
        }  
    }
  4. Revenez au formulaire et cliquez sur une zone vide. Dans la fenêtre Propriétés, cliquez sur le bouton événements Events
  5. Double-cliquez sur le champ de la peinture et mettez en uvre son événement comme suit :
    private void Form1_Paint(object sender, PaintEventArgs e)  
    {              
                e.Graphics.DrawImage(bmpDrawingArea, 0, 0);  
    }
  6. Revenez au formulaire et double-cliquez sur le bouton Générer
  7. Implémentez son événement Click comme suit :
    private void btnGenerate_Click(object sender, EventArgs e)  
    {              
        int monday = 0;              
        int tuesday = 0;              
    	int wednesday = 0;              
    	int thursday = 0;              
    	int friday = 0;                
     
    	try              
    	{                  
    		monday = int.Parse(txtMonday.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid value");              
    	}                
     
    	try              
    	{                  
    		tuesday = int.Parse(txtTuesday.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid value");              
    	}               
     
    	try              
    	{                  
    		wednesday = int.Parse(txtWednesday.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid value");              
    	}                
    	
    	try              
    	{                  
    		thursday = int.Parse(txtThursday.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid value");              
    	}                
     
    	try              
    	{                  
    		friday = int.Parse(txtFriday.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid value");              
    	}                
     
    	graphDrawingArea.Clear(this.BackColor);                
    
    	graphDrawingArea.FillRectangle(new SolidBrush(Color.Red),                      
    				this.txtMonday.Left + 5,                      
    				280 - monday, 40, monday);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                      
    				this.txtMonday.Left + 5,                          
    				280 - monday, 40, monday);              
    	graphDrawingArea.FillRectangle(new SolidBrush(Color.Blue),                      
    				this.txtTuesday.Left + 5,                      
    				280 - tuesday, 40, tuesday);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                      
    				this.txtTuesday.Left + 5,                          
    				280 - tuesday, 40, tuesday);              
    	graphDrawingArea.FillRectangle(new SolidBrush(Color.Fuchsia),                      
    				this.txtWednesday.Left + 5,                      
    				280 - wednesday, 40, wednesday);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                      
    				this.txtWednesday.Left + 5,                      
    				280 - wednesday, 40, wednesday);              
    	graphDrawingArea.FillRectangle(new SolidBrush(Color.Brown),                      
    				this.txtThursday.Left + 5,                      
    				280 - thursday, 40, thursday);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                      
    				this.txtThursday.Left + 5,                      
    				280 - thursday, 40, thursday);              
    	graphDrawingArea.FillRectangle(new SolidBrush(Color.Turquoise),                      
    				this.txtFriday.Left + 5,                      
    				280 - friday, 40, friday);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                      
    				this.txtFriday.Left + 5,                          
    				280 - friday, 40, friday);                
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                      
    				10, 280, Width - 30, 1);              
    	Invalidate();  
    }
  8. Exécutez l'application et testez le formulaire

       Weekly Sales
  9. Apràs utilisation, fermez le formulaire

Les Brosses Hatch

 

Introduction

Un pinceau écoutille s'appuie sur un motif dessiné ou conçu pour définir le type de remplissage. À l'appui des brosses de l'éclosion, le .NET Framework fournit les modàles que vous pouvez utiliser dans le cadre de la brosse. Ces modàles pré-conçus sont appelés des styles de l'éclosion. Cela signifie que lorsque vous utilisez un pinceau de l'éclosion, vous devez spécifier le type de modàle que vous souhaitez utiliser, par l'intermédiaire des styles disponibles de l'éclosion. Pour rendre la zone remplie plus intéressante, vous spécifiez également la couleur à utiliser lors de l'élaboration du modàle.

Pour obtenir un pinceau de l'éclosion, vous utilisez la classe HatchBrush. Un de ses constructeurs a les syntaxes suivantes :

public HatchBrush(HatchStyle style,  Color foreColor);

Le style d'un pinceau Hatch

L'argument foreColor est la couleur qui sera utilisée pour dessiner le motif. L'argument de style est le style de hachure que vous souhaitez appliquer. Certains des styles disponibles sont :

using System;  
using System.Drawing;  
using System.Windows.Forms;  
using System.Drawing.Drawing2D;    

public class Exercise : Form  
{      
	 public Exercise()      
	 {          
		 InitializeComponent();      
	 }        
 
 
	 void InitializeComponent()      
	 {          
		Paint += new PaintEventHandler(Exercise_Paint);      
	 }        
 
 
	 private void Exercise_Paint(object sender, PaintEventArgs e)      
	 {          
		 HatchBrush brushBackDiag =      
	 new HatchBrush(HatchStyle.BackwardDiagonal,               
			  Color.FromArgb(0, 0, 255));          
		HatchBrush brushCross =          
		new HatchBrush(HatchStyle.Cross,                   
				Color.FromArgb(200, 0, 0));          
		HatchBrush brushDarkDown =          
		new HatchBrush(HatchStyle.DarkDownwardDiagonal,                   
				Color.Salmon);          
		HatchBrush brushDarkHorz =          
		new HatchBrush(HatchStyle.DarkHorizontal,                   
				Color.Navy);          
		HatchBrush brushDarkUpDiag =          
		new HatchBrush(HatchStyle.DarkUpwardDiagonal,                   
				Color.Pink);          
		HatchBrush brushVertical =          
		new HatchBrush(HatchStyle.DarkVertical,                   
				Color.FromArgb(255, 0, 255));          
		HatchBrush brushDashDnDiag =          
		new HatchBrush(HatchStyle.DashedDownwardDiagonal,                   
				Color.FromArgb(255, 128, 0));          
		HatchBrush brushDashHorz =          
		new HatchBrush(HatchStyle.DashedHorizontal,                   
				Color.FromArgb(0, 128, 192));          
		HatchBrush brushDashUpDiag =          
		new HatchBrush(HatchStyle.DashedUpwardDiagonal,                   
				Color.Green);          
		HatchBrush brushDashVert =          
		new HatchBrush(HatchStyle.DashedVertical,                   
				Color.Firebrick);          
		HatchBrush brushDiagBrisk =          
		new HatchBrush(HatchStyle.DiagonalBrick,                   
				Color.Fuchsia);          
		HatchBrush brushDiagCross =          
		new HatchBrush(HatchStyle.DiagonalCross,                   
				Color.Moccasin);          
		HatchBrush brushDivot =          
		new HatchBrush(HatchStyle.Divot,                   
				Color.Goldenrod);          
		HatchBrush brushDotDiamond =          
		new HatchBrush(HatchStyle.DottedDiamond,                   
				Color.Gainsboro);          
		HatchBrush brushDottedGrid =          
		new HatchBrush(HatchStyle.DottedGrid,                   
				Color.Khaki);          
		HatchBrush brushForDiag =          
		new HatchBrush(HatchStyle.ForwardDiagonal,                   
				Color.Maroon);          
		HatchBrush brushHorz =          
		new HatchBrush(HatchStyle.Horizontal,                   
				Color.Red);          
		HatchBrush brushHorzBrick =          
		new HatchBrush(HatchStyle.HorizontalBrick,                   
				Color.SaddleBrown);          
		HatchBrush brushLgChkBoard =          
		new HatchBrush(HatchStyle.LargeCheckerBoard,                   
				Color.RoyalBlue);          
		HatchBrush brushLgConfetti =          
		new HatchBrush(HatchStyle.LargeConfetti,                   
				Color.MistyRose);          
		HatchBrush brushLgGrid =          
		new HatchBrush(HatchStyle.LargeGrid,                   
				Color.Purple);          
		HatchBrush brushLtDnDiag =          
		new HatchBrush(HatchStyle.LightDownwardDiagonal,                   
				Color.DarkCyan);          
		HatchBrush brushLtHorz =          
		new HatchBrush(HatchStyle.LightHorizontal,                   
				Color.PowderBlue);          
		HatchBrush brushUpDiag =          
		new HatchBrush(HatchStyle.LightUpwardDiagonal,                   
				Color.SeaGreen);          
		HatchBrush brushLtVert =          
		new HatchBrush(HatchStyle.LightVertical,                   
				Color.Olive);            
 
		
		e.Graphics.FillRectangle(brushBackDiag,                         
						20, 20, 80, 60);          
		e.Graphics.FillRectangle(brushCross,                         
						120, 20, 80, 60);          
		e.Graphics.FillRectangle(brushDarkDown,                         
						220, 20, 80, 60);          
		e.Graphics.FillRectangle(brushDarkHorz,                         
						320, 20, 80, 60);          
		e.Graphics.FillRectangle(brushDarkUpDiag,                         
						420, 20, 80, 60);            
		
		e.Graphics.FillRectangle(brushVertical,                             
						20, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashDnDiag,                         
						120, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashHorz,                         
						220, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashUpDiag,                         
						320, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashVert,                         
						420, 100, 80, 60);            
 
		e.Graphics.FillRectangle(brushDashVert,                         
						20, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDiagBrisk,                         
						120, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDiagCross,                         
						220, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDivot,                         
						320, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDotDiamond,                         
						420, 180, 80, 60);            
 
		e.Graphics.FillRectangle(brushDottedGrid,                         
						20, 260, 80, 60);          
 
		e.Graphics.FillRectangle(brushForDiag,                         
						120, 260, 80, 60);          
		e.Graphics.FillRectangle(brushHorz,                             
						220, 260, 80, 60);          
		e.Graphics.FillRectangle(brushHorzBrick,                         
						320, 260, 80, 60);          
		e.Graphics.FillRectangle(brushLgChkBoard,                         
						420, 260, 80, 60);            
		e.Graphics.FillRectangle(brushLgGrid,                         
						20, 340, 80, 60);          
 
		e.Graphics.FillRectangle(brushLtDnDiag,                         
						120, 340, 80, 60);          
		e.Graphics.FillRectangle(brushLtHorz,                         
						220, 340, 80, 60);          
		e.Graphics.FillRectangle(brushUpDiag,                         
						320, 340, 80, 60);          
		e.Graphics.FillRectangle(brushLtVert,                         
						420, 340, 80, 60);
	}  
}    
 
public class Program  
{      
	public static int Main()      
	{          
		Application.Run(new Exercise());            
 
		return 0;      
	}  
}

Cela produirait :

Hatch Brushes

ApplicationApplication : Utilisation d'un pinceau Hatch

  1. Démarrez une nouvelle Application Windows Forms nommée YearlySales2
  2. Concevez le formulaire comme suit :
     

    Company Yearly Sales

    Control

    Name

    Text

    GroupBox

    GroupBox

     

    Current Year's Sales

    Label

    Label

     

    1st Qtr

    Label

    Label

     

    2nd Qtr

    Label

    Label

     

    3rd Qtr

    Label

    Label

     

    4th Qtr

    TextBox

    TextBox

    txtCurrentQtr1

    0

    TextBox

    TextBox

    txtCurrentQtr2

    0

    TextBox

    TextBox

    txtCurrentQtr3

    0

    TextBox

    TextBox

    txtCurrentQtr4

    0

    Button

    TextBox

    Fermez

    btnClose

    GroupBox

    GroupBox

     

    Previous Year's Sales

    Label

    Label

     

    1st Qtr

    Label

    Label

     

    2nd Qtr

    Label

    Label

     

    3rd Qtr

    Label

    Label

     

    4th Qtr

    TextBox

    TextBox

    txtPreviousQtr1

    0

    TextBox

    TextBox

    txtPreviousQtr2

    0

    TextBox

    TextBox

    txtPreviousQtr3

    0

    TextBox

    TextBox

    txtPreviousQtr4

    0

    Button

    Button

    Générer

    btnGenerate

    Label

    Label

     

    _________ Legend _________

    Label

    Label

     

    This Year's Sales

    Label

    Label

     

    Last Year's Sales

  3. Double-cliquez sur une zone inoccupée du formulaire et modifiez le fichier comme suit :
    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;  
    using System.Drawing.Drawing2D;    
     
    namespace YearlySales2  
    {      
    	public partial class Form1 : Form      
    	{          
    		Graphics graphDrawingArea;          
    		Bitmap bmpDrawingArea;            
     
    		public Form1()          
    		{              
    			InitializeComponent();          
    		}            
     
    		private void Form1_Load(object sender, EventArgs e)          
    		{              
    			bmpDrawingArea = new Bitmap(Width, Height);              
    			graphDrawingArea = Graphics.FromImage(bmpDrawingArea);          
    		}      
    	}  
    }
  4. Revenez au formulaire et cliquez sur une zone vide. Dans la fenêtre Propriétés, cliquez sur le bouton événements Events
  5. Double-cliquez sur le champ de la peinture et mettez en uvre son événement comme suit :
    private void Form1_Paint(object sender, PaintEventArgs e)  
    {              
        e.Graphics.DrawImage(bmpDrawingArea, 0, 0);
    }
  6. Revenez au formulaire et double-cliquez sur le bouton Générer
  7. Implémentez l'événement comme suit :
    private void btnGenerate_Click(object sender, EventArgs e)  
    {             
        // Retrieve the values of the current year's sales              
        int curQtr1 = 0;              
        int curQtr2 = 0;              
        int curQtr3 = 0;              
        int curQtr4 = 0;                
     
        try              
        {                  
    	curQtr1 = int.Parse(txtCurrentQtr1.Text) / 100;              
        }              
        catch (FormatException)              
        {                  
    	MessageBox.Show("Invalid Value");              
        }                
     
        try              
        {                  
    	curQtr2 = int.Parse(txtCurrentQtr2.Text) / 100;              
        }              
        catch (FormatException)              
        {                  
    	MessageBox.Show("Invalid Value");              
        }
                    
        try              
        {                  
    	curQtr3 = int.Parse(txtCurrentQtr3.Text) / 100;              
        }              
        catch (FormatException)              
        {                  
    	MessageBox.Show("Invalid Value");              
        }                
    				
        try              
        {                 
    	curQtr4 = int.Parse(txtCurrentQtr4.Text) / 100;              
        }              
        catch (FormatException)              
        {                  
    	MessageBox.Show("Invalid Value");              
        }                
     
        // Create an array of Rectangle objects for the current year              
        Rectangle[] rectCurrentYear =              
        {                  
    	new Rectangle(this.txtCurrentQtr1.Left+20,  			                  
    			380-curQtr1, 40, curQtr1),                  
    	new Rectangle(this.txtCurrentQtr2.Left+20,  			                   
    			380-curQtr2, 40, curQtr2),  		        
    	new Rectangle(this.txtCurrentQtr3.Left+20,  			                  
    			380-curQtr3, 40, curQtr3),  		        
    	new Rectangle(this.txtCurrentQtr4.Left+20,  			                  
    			380-curQtr4, 40, curQtr4)              
        };                
    				
        // Retrieve the values of last year's sales              
    	int prvQtr1 = 0;              
    	int prvQtr2 = 0;              
    	int prvQtr3 = 0;              
    	int prvQtr4 = 0;                
     
    	try              
    	{                  
    		prvQtr1 = int.Parse(txtPreviousQtr1.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid Value");              
    	}
                    
    	try              
    	{                  
    		prvQtr2 = int.Parse(txtPreviousQtr2.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid Value");              
    	}                
     
    	try              
    	{                  
    		prvQtr3 = int.Parse(txtPreviousQtr3.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid Value");              
    	}                
     
    	try              
    	{                  
    		prvQtr4 = int.Parse(txtPreviousQtr4.Text) / 100;              
    	}              
    	catch (FormatException)              
    	{                  
    		MessageBox.Show("Invalid Value");              
    	}                
     
    	// Create an array of Rectangle objects for the previous year              
    	Rectangle[] rectPreviousYear =              
    	{                  
    		new Rectangle(this.txtPreviousQtr1.Left+30,  			                  
    				380-prvQtr1, 40, prvQtr1),   		        
    		new Rectangle(this.txtPreviousQtr2.Left+30,  			                  
    			380-prvQtr2, 40, prvQtr2),  	            
    		new Rectangle(this.txtPreviousQtr3.Left+30,  			                  
    				380-prvQtr3, 40, prvQtr3),  		        
    		new Rectangle(this.txtPreviousQtr4.Left+30,  			                  
    				380-prvQtr4, 40, prvQtr4)              
    	};                
     
    	// In case the user has changed the values, erase the previous chart              
    	graphDrawingArea.Clear(this.BackColor);                
     
    	HatchBrush brushDiagCross = new HatchBrush(HatchStyle.DiagonalCross,                        
    						Color.White, Color.Blue);              
    	HatchBrush brushDotDiamond = new HatchBrush(HatchStyle.DottedDiamond,                        
    						Color.Fuchsia, Color.Brown);                
     
    	// Draw the chart for the previous year first to send it back              
    	graphDrawingArea.FillRectangles(brushDiagCross, rectPreviousYear);              
    	graphDrawingArea.DrawRectangles(new Pen(Color.Blue), rectPreviousYear);              
    	// Draw the chart for the current year in front              
    	graphDrawingArea.FillRectangles(brushDotDiamond, rectCurrentYear);              
    	graphDrawingArea.DrawRectangles(new Pen(Color.Red), rectCurrentYear);                
     
    	// Draw the small rectangles of the legend              
    	graphDrawingArea.FillRectangle(brushDotDiamond,                              
    					this.lblCurYear.Left - 30,                              
    					this.lblCurYear.Top, 20, 14);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Red),                              
    					this.lblCurYear.Left - 30,                              
    					this.lblCurYear.Top, 20, 14);              
    	graphDrawingArea.FillRectangle(brushDiagCross,                              
    					this.lblLastYear.Left - 30,                              
    					this.lblLastYear.Top, 20, 14);              
    	graphDrawingArea.DrawRectangle(new Pen(Color.Blue),                              
    					this.lblLastYear.Left - 30,                              
    					this.lblLastYear.Top, 20, 14);                
    	graphDrawingArea.DrawRectangle(new Pen(Color.Black),                              
    					25, 380, Width - 220, 1);              
    	Invalidate();  
    }
  8. Revenez au formulaire
  9. Double-cliquez sur le bouton fermer et mettez en uvre son événement Click comme suit :
    private void btnClose_Click(object sender, EventArgs e)  
    {              
    	Close();  
    }
  10. Exécutez l'application et testez le formulaire

    Yearly Sales

  11. Apràs utilisation, fermez le formulaire

La couleur d'arriàre-plan d'un pinceau Hatch

Si vous utilisez le constructeur ci-dessus pour remplir un formulaire, le motif sélectionné sera tiré au dessus d'une couleur noire utilisée comme arriàre-plan. Si vous souhaitez utiliser un arriàre-plan différent, utilisez le constructeur suivant pour initialiser le pinceau :

public HatchBrush(HatchStyle hatchstyle, Color foreColor, Color backColor);

L'argument backColor transmis comme une valeur de couleur servira de couleur d'arriàre-plan. Voici des exemples de spécifier la couleur d'arriàre plan.

private void Exercise_Paint(object sender, PaintEventArgs e)  
{          
		HatchStyle[] hsBrush =          
		{              
			HatchStyle.BackwardDiagonal,              
			HatchStyle.Cross, HatchStyle.Divot,              
			HatchStyle.DarkDownwardDiagonal,              
			HatchStyle.DarkHorizontal, HatchStyle.ForwardDiagonal,              
			HatchStyle.DarkUpwardDiagonal,              
			HatchStyle.DarkVertical, HatchStyle.HorizontalBrick,              
			HatchStyle.DashedDownwardDiagonal,              
			HatchStyle.DashedHorizontal,              
			HatchStyle.DashedVertical, HatchStyle.LargeCheckerBoard,              
			HatchStyle.DiagonalBrick, HatchStyle.Horizontal,              
			HatchStyle.DiagonalCross, HatchStyle.DottedGrid,              
			HatchStyle.DottedDiamond, HatchStyle.LightUpwardDiagonal,                
			HatchStyle.LargeConfetti, HatchStyle.LargeGrid,              
			HatchStyle.LightDownwardDiagonal, HatchStyle.OutlinedDiamond              
			HatchStyle.LightHorizontal, HatchStyle.LightVertical          
		};            
 
 
		Color[] ForeColors =          
		{              
			Color.FromArgb(0, 0, 255), Color.FromArgb(200, 0, 0),              
			Color.Salmon, Color.Navy, Color.Pink,              
			Color.FromArgb(255, 0, 255), Color.FromArgb(255, 128, 0),              
			Color.FromArgb(0, 128, 192), Color.Green,              
			Color.Firebrick, Color.Fuchsia, Color.Moccasin,              
			Color.Goldenrod, Color.Gainsboro, Color.Khaki,              
			Color.Maroon, Color.DarkCyan, Color.Purple,              
			Color.MistyRose, Color.RoyalBlue, Color.Red,              
			Color.SaddleBrown, Color.Olive, Color.SeaGreen,              
			Color.PowderBlue          
		};            
 
 
		Color[] BackColors =          
		{              
			Color.Azure, Color.DarkBlue, Color.AntiqueWhite,              
			Color.Aqua, Color.DarkGray, Color.Aquamarine,              
			Color.Azure, Color.Beige, Color.DarkGoldenrod,              
			Color.Bisque, Color.DarkKhaki, Color.BlanchedAlmond,              
			Color.Brown, Color.DarkCyan, Color.AliceBlue,              
			Color.BurlyWood, Color.CadetBlue, Color.DarkMagenta,              
			Color.Coral, Color.Chartreuse, Color.CornflowerBlue,              
			Color.Cornsilk, Color.Crimson, Color.Cyan,              
			Color.DarkGreen          
		};            
 
		Random rnd = new Random();            
 
		HatchBrush brushBackDiag =      
	new HatchBrush(hsBrush[rnd.Next(25)],               
			ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushCross =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDarkDown =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDarkHorz =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDarkUpDiag =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushVertical =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDashDnDiag =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDashHorz =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDashUpDiag =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDashVert =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDiagBrisk =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDiagCross =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDivot =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDotDiamond =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushDottedGrid =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushForDiag =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushHorz =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushHorzBrick =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushLgChkBoard =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushLgConfetti =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushLgGrid =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushLtDnDiag =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushLtHorz =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushUpDiag =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);          
		HatchBrush brushLtVert =          
		new HatchBrush(hsBrush[rnd.Next(25)],                   
				ForeColors[rnd.Next(25)], BackColors[rnd.Next(25)]);            
 
		
		e.Graphics.FillRectangle(brushBackDiag, 20, 20, 80, 60);          
		e.Graphics.FillRectangle(brushCross, 120, 20, 80, 60);          
		e.Graphics.FillRectangle(brushDarkDown, 220, 20, 80, 60);          
		e.Graphics.FillRectangle(brushDarkHorz, 320, 20, 80, 60);          
		e.Graphics.FillRectangle(brushDarkUpDiag, 420, 20, 80, 60);            
 
		e.Graphics.FillRectangle(brushVertical, 20, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashDnDiag, 120, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashHorz, 220, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashUpDiag, 320, 100, 80, 60);          
		e.Graphics.FillRectangle(brushDashVert, 420, 100, 80, 60);            
 
		e.Graphics.FillRectangle(brushDashVert, 20, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDiagBrisk, 120, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDiagCross, 220, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDivot, 320, 180, 80, 60);          
		e.Graphics.FillRectangle(brushDotDiamond, 420, 180, 80, 60);            
 
		e.Graphics.FillRectangle(brushDottedGrid, 20, 260, 80, 60);          
		e.Graphics.FillRectangle(brushForDiag, 120, 260, 80, 60);          
		e.Graphics.FillRectangle(brushHorz, 220, 260, 80, 60);          
		e.Graphics.FillRectangle(brushHorzBrick, 320, 260, 80, 60);          
		e.Graphics.FillRectangle(brushLgChkBoard, 420, 260, 80, 60);            
 
		e.Graphics.FillRectangle(brushLgGrid, 20, 340, 80, 60);          
		e.Graphics.FillRectangle(brushLtDnDiag, 120, 340, 80, 60);          
		e.Graphics.FillRectangle(brushLtHorz, 220, 340, 80, 60);          
		e.Graphics.FillRectangle(brushUpDiag, 320, 340, 80, 60);          
		e.Graphics.FillRectangle(brushLtVert, 420, 340, 80, 60);  
}

À tout moment, pour découvrir la couleur utilisée pour peindre un modàle, vous pouvez accéder à la propriété ForegroundColor du pinceau. Pour connatre la couleur utilisée à l'arriàre-plan, vous pouvez accéder à propriété BackgroundColor du pinceau. Pour connatre le style de hachure utilisé sur le pinceau actuel, vous pouvez accéder à la propriété HatchStyle.

 
 
 
 

Précédent Copyright © 2009-2011, yevol.com Suivant