2017-04-16 3 views
0

Die Frage ist einfach, vorausgesetzt, Sie haben eine Form (sagen wir ein Rechteck) und einen Text ("Hallo" zum Beispiel), so wird es den Text alle über die Grenzen des Rechtecks ​​für so viele Male wie es schreiben Beispiel passt für:Wie zeichne ich einen Text in einer Form? C#

hello hello hello hello 

hello    hello 

hello    hello 

hello hello hello hello 

um es zu tun, gehe ich davon aus Sie eine Grafikvariable verwenden müssen, würde, ich weiß nur nicht, wie es zu tun.

Ein Code für eine Zeichenfolge in einem Bitmap-Objekt zeichnen:

Bitmap tempp = new Bitmap(1, 1); 
Graphics g = Graphics.FromImage(tempp); 
SizeF w = g.MeasureString("22", new Font("Tahoma", 200));//in order to get the size of the string as a pixel measurement 
Bitmap bmp = new Bitmap((int)w.Width+1, (int)w.Height+1);//the bitmap that will contain the text as a picture 
RectangleF rectf = new RectangleF(0, 0, (int)w.Width+1, (int)w.Height+1); 
g = Graphics.FromImage(bmp); 
g.SmoothingMode = SmoothingMode.AntiAlias; 
g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; 
StringFormat format = new StringFormat() 
{ 
    Alignment = StringAlignment.Center, 
    LineAlignment = StringAlignment.Center 
}; 
g.DrawString("22", new Font("Tahoma", 200), Brushes.Black, rectf, format); 
g.Flush(); 

Vielen Dank im Voraus.

Für zweite Bemerkung:

hello hello hello 
hel   llo 
hel   llo 
hello hello hello 
+1

Sobald Sie die Größe eines Strings-Bild haben, die Gesamtgröße des endgültigen Rechteck berechnen und mehrere String-Bildkopien auf sie setzen, seine jede Kopie in eigene Koordinaten. Vielleicht [dieser Link] (http://stackoverflow.com/questions/1478022/c-sharp-get-a-controls-position-on-a-form) kann Ihnen helfen. –

+0

Was ist mit der Größe des Rechtecks? Was ist, wenn es zu groß ist, um vier "Hallo" in Folge zu haben, aber zu klein, um fünf zu haben. Passen Sie dann die Größe des Rechtecks ​​an? Oder passen Sie den Abstand zwischen den Texten an? – Anthony

+0

@Anthony macht es so: Ich werde den Thread bearbeiten, da ich hier keinen Code anzeigen kann. –

Antwort

1

Ich hoffe, das ist das, was Sie brauchen. Hier gibt es nicht viel zu erklären. Die Logik ist ziemlich einfach.

public string MyString = "Hello" 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     var g = e.Graphics; 
     var strFont = new Font("Tahoma", 10); 
     var strSizeF = g.MeasureString(MyString, strFont); 

     var canvas = new Rectangle 
     { 
      Height = 200, 
      Width = 200, 
      Location = new Point(10, 10), 
     }; 

     g.DrawRectangle(new Pen(new SolidBrush(Color.Blue)), canvas); 

     var nx = (int)(canvas.Width/strSizeF.Width); 
     var ny = (int)(canvas.Height/strSizeF.Height); 
     var spacingX = (canvas.Width - nx * strSizeF.Width)/(nx-1); 
     var spacingY = (canvas.Height - ny * strSizeF.Height)/(ny-1); 

     //draw top row and bottom row 
     int i; 
     for (i = 0; i < nx; i++) 
     { 
      g.DrawString(
       MyString, 
       strFont, 
       Brushes.Black, 
       new PointF(canvas.X + i*(strSizeF.Width + spacingX), canvas.Y) 
       ); 
      g.DrawString(
       MyString, 
       strFont, 
       Brushes.Black, 
       new PointF(canvas.X + i * (strSizeF.Width + spacingX), canvas.Y + canvas.Height - strSizeF.Height) 
      ); 
     } 

     //divide the string into half 
     var isLengthOdd = MyString.Length % 2 != 0; 
     var substr1 = MyString.Substring(0, MyString.Length/2 + (isLengthOdd ? 1 : 0)); 
     var substr2 = MyString.Substring(MyString.Length/2, MyString.Length - MyString.Length/2); 
     var substr2SizeF = g.MeasureString(substr2, strFont); 
     //draw side rows 
     for (i = 1; i < ny - 1; i++) 
     { 
      g.DrawString(
       substr1, 
       strFont, 
       Brushes.Black, 
       new PointF(canvas.X, canvas.Y + i * (strSizeF.Height + spacingY)) 
      ); 
      g.DrawString(
       substr2, 
       strFont, 
       Brushes.Black, 
       new PointF(canvas.X + canvas.Width - substr2SizeF.Width, canvas.Y + i * (strSizeF.Height + spacingY)) 
      ); 
     } 

    } 

Ergebnis:

Result

+0

10 Hallo, Entschuldigung für die verspätete Verspätung, arbeite noch an deiner Antwort, es gab mir ein paar nette Anweisungen und half viel Verständnis, also danke für die Antwort :). –

+1

Ich habe deine Antwort untersucht, es war nicht wirklich genau, was ich machen wollte, aber es zeigte mir, wie man mit Grafiken arbeitet. Dank Ihrer Antwort habe ich zu dem, was ich bekommen wollte, und deshalb habe ich Ihre Antwort akzeptiert. –

+0

@matanjustme Ich weiß das zu schätzen. Wenn Sie dazu bereit sind, können Sie Ihre eigene Frage beantworten und akzeptieren. Dies wird anderen helfen, die Ihre Frage und Antwort nützlich finden. :) – Anthony

Verwandte Themen