Csharp/C Sharp/2D Graphics/Text Justify

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

a long string that will wrap and centered both vertically and horizontally

<source lang="csharp">

using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   String s = "This is a long string that will wrap. ";
   s += "It will be centered both vertically and horizontally.";
   Font f = new Font("Arial", 12);
   StringFormat sf = new StringFormat();
   sf.Alignment = StringAlignment.Center;        
   sf.LineAlignment = StringAlignment.Center;    
   Rectangle r = new Rectangle(10, 10, 300, f.Height * 4);
   g.DrawRectangle(Pens.Black, r);
   g.DrawString(s, f, Brushes.Black, r, sf);
   f.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


Draw left justified text

<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form{

 public Form1()
 {
       InitializeComponent();
       SetStyle(ControlStyles.Opaque, true);
       Bounds = new Rectangle(0, 0, 500, 300);
 }
   protected override void OnPaint(PaintEventArgs e) {
        Graphics g = e.Graphics;
  
        g.FillRectangle(Brushes.White, ClientRectangle);
        // Draw left justified text
        Rectangle rect = new Rectangle(0, 0, 400, Font.Height);
        g.DrawRectangle(Pens.Blue, rect);
        g.DrawString("www.nfex.ru", Font,
           Brushes.Black, rect);
     }
   private void InitializeComponent()
   {
     this.Size = new System.Drawing.Size(300,300);
     this.Text = "Form1";
   }
   static void Main() 
   {
     Application.Run(new Form1());
   }

}


      </source>


Draw Rectangle surrounding the Text

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.PageUnit = GraphicsUnit.Inch;
   Pen p = new Pen(Color.Black, 1 / 96f);
   Font f = new Font("Times New Roman", 16);
   String s = "Abc";
   SizeF sf = g.MeasureString(s, f);
   g.DrawRectangle(p, 1, 1, sf.Width, sf.Height);
   g.DrawString(s, f, Brushes.Black, 1, 1);
   f.Dispose();
   p.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


Draw right justified text

<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form{

 public Form1()
 {
       InitializeComponent();
       SetStyle(ControlStyles.Opaque, true);
       Bounds = new Rectangle(0, 0, 500, 300);
 }
   protected override void OnPaint(PaintEventArgs e) {
        Graphics g = e.Graphics;
  
        g.FillRectangle(Brushes.White, ClientRectangle);
        // Draw right justified text
        Font aFont = new Font("Arial", 16, FontStyle.Bold | FontStyle.Italic);
        Rectangle rect = new Rectangle(0, 0, 400, aFont.Height);
        g.DrawRectangle(Pens.Blue, rect);
        
        StringFormat sf = new StringFormat();
        sf.Alignment = StringAlignment.Far;
        g.DrawString("www.nfex.ru", aFont, Brushes.Blue,
           rect, sf);
     }
   private void InitializeComponent()
   {
     this.Size = new System.Drawing.Size(300,300);
     this.Text = "Form1";
   }
   static void Main() 
   {
     Application.Run(new Form1());
   }

}


      </source>


Draw the rectangle and draw the string, using the rectangle as a bounding box

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   String s = "This string is long enough to wrap. ";
   Font f = new Font("Arial", 12);
   Rectangle r = new Rectangle(20, 20, 150, f.Height * 4);
   StringFormat sf = new StringFormat();
   sf.FormatFlags = StringFormatFlags.NoWrap;
   g.DrawRectangle(Pens.Black, r);
   g.DrawString(s, f, Brushes.Black, r, sf);
   f.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


Rotate the text 45 degrees clockwise and translate the text 150 pixels horizontally

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   Font f = new Font("Times New Roman", 24);
   g.DrawString("Rotate then Translate", f, Brushes.Black, 0, 0);
   g.RotateTransform(45);
   g.TranslateTransform(150, 0);
   g.DrawString("Rotate  then Translate ", f, Brushes.Black, 0, 0);
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


String Rectangle

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   String s = "AAAAAAAAAA";
   StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical);
   Font f = new Font("Times New Roman", 14);
   SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf);
   RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height);
   g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);
   g.DrawString(s, f, Brushes.Black, rf, sf);
   f.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


This text is centered and underlined

<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form{

 public Form1()
 {
       InitializeComponent();
       SetStyle(ControlStyles.Opaque, true);
       Bounds = new Rectangle(0, 0, 500, 300);
 }
   protected override void OnPaint(PaintEventArgs e) {
        Graphics g = e.Graphics;
  
        g.FillRectangle(Brushes.White, ClientRectangle);
        // draw centered text
        Font cFont = new Font("Courier New", 12, FontStyle.Underline);
        Rectangle rect = new Rectangle(0, 0, 400, cFont.Height);
        g.DrawRectangle(Pens.Blue, rect);
        StringFormat sf = new StringFormat();
        sf.Alignment = StringAlignment.Center;
        g.DrawString("This text is centered  and underlined.", cFont,
           Brushes.Red, rect, sf);
     }
   private void InitializeComponent()
   {
     this.Size = new System.Drawing.Size(300,300);
     this.Text = "Form1";
   }
   static void Main() 
   {
     Application.Run(new Form1());
   }

}


      </source>


use a 12pt font, and assume the text string must fit into a width of 150 pixels

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   String s = "This string is long enough to wrap. ";
   Font f = new Font("Arial", 12);
   SizeF sf = g.MeasureString(s, f, 150);
   RectangleF rf = new RectangleF(20, 20, sf.Width, sf.Height);
   g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);
   g.DrawString(s, f, Brushes.Black, rf); 
   f.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


Use tab to control the DrawString

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   Font f = new Font("Times New Roman", 12);
   Font bf = new Font(f, FontStyle.Bold);
   StringFormat sf = new StringFormat();
   float[] ts = { 10.0f, 70.0f, 100.0f, 90.0f };
   sf.SetTabStops(0.0f, ts);
   string s1 = "\tA\tAAA\tAAAAA\tAAAAAAAAAA";
   string s2 = "\tAAAAAAA\tAAAAA\tAA\tAAA";
   g.DrawString(s1, bf, Brushes.Black, 20, 20, sf);
   g.DrawString(s2, f, Brushes.Blue, 20, 20 + bf.Height, sf);
   f.Dispose();
   bf.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


With a 200px-width rectangle, and a 12pt font, it requires six lines to display the string in its entirety

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   String s = "This string is long enough to wrap. ";
   Font f = new Font("Arial", 12);
   Rectangle r = new Rectangle(20, 20, 200, f.Height * 6);
   g.DrawRectangle(Pens.Black, r);
   g.DrawString(s, f, Brushes.Black, r);
   f.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>