Entwickler-Ecke

WinForms - Tabs mit format string geht nicht


hoxplus - Mo 14.07.14 19:37
Titel: Tabs mit format string geht nicht
Hey Leute,

ich habe folgendes Problem: Ich möchte einen String mit tabs ausgeben.
Wenn ich folgendes mache:

C#-Quelltext
1:
string xy = "Hallo\tWelt";                    

und das dann ausgebe funktioniert es wunderbar.
Mache ich aber folgendes:

C#-Quelltext
1:
string xy = String.Format("{0} Hallo\tWelt", iXYvariable);                    

und das dann ausgebe funktioniert es nicht. Das ist sehr ärgerlich.

Ich hoffe ihr könnt mir helfen und danke schonmal für eure Bemühungen

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Ralf Jansen - Mo 14.07.14 19:43

Funktioniert hier wie erwartet? Wie lang ist deine iXYvariable VAriable? Zufällig 3 Zeichen?


hoxplus - Mo 14.07.14 19:48

Ist immer unterschiedlich. Meistens aber länger als 3 Zeichen


Ralf Jansen - Mo 14.07.14 19:51

Dann sag mal wo du es ausgibst.

In einem Winforms Control kann ich dein Problem nicht nachstellen. Funktioniert wunderbar.


hoxplus - Mo 14.07.14 20:04

also ich gebe den string mit System.Drawing.Graphics.DrawString direkt in eine Form aus.
Und ich habe auch noch vergessen zu erwähnen, dass ich mehrere strings mit dem stringbuilder
benuzte. Also so:

C#-Quelltext
1:
2:
3:
4:
string xy = String.Format("{0} Hallo\tWelt", wiegehabtvariable);
string xyz = "irgendwas";
sb.AppendLine(xy);
sb.AppendLine(xy);

die ausgabe funktioniert ja auch nur die tabs fehlen

PS: sry ich hab wohl am anfang zu wenig infos zu der situation gegeben

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Christian S. - Mo 14.07.14 20:12

Ich bekomme das Problem auch nicht reproduziert. Folgender Quelltext tut genau das, was man erwarten würde:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
    private void button1_Click(object sender, EventArgs e)
    {
      var iXYvariable = 5;
      string xy = String.Format("{0} Hallo\tWelt", iXYvariable);
      string xyz = "irgendwas";

      var sb = new StringBuilder();
      sb.AppendLine(xy);
      sb.AppendLine(xyz);

      using (var gr = this.CreateGraphics())
        gr.DrawString(sb.ToString(), new Font("Arial"11), Brushes.Black, new PointF(2020));
    }


Ralf Jansen - Mo 14.07.14 20:12

Wie nähern uns ;)
Kann ich immer noch nicht nachvollziehen.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void Form1_Paint(object sender, PaintEventArgs e)
{
    StringBuilder x = new StringBuilder();
    x.AppendLine("Hallo\tWelt").
      AppendLine(String.Format("{0} Hallo\tWelt"1)).
      AppendLine(String.Format("{0} Hallo\tWelt"12)).
      AppendLine(String.Format("{0} Hallo\tWelt"123)).
      AppendLine(String.Format("{0} Hallo\tWelt"1234));

    e.Graphics.DrawString(x.ToString(), this.Font, new SolidBrush(Color.Black), 1010);
}


Ausgabe

Output


hoxplus - Mo 14.07.14 20:37

Also ich habe jetzt einmal den von euch geposteten Code in einem neuen
Projekt getestet und bei mir funktioniert er nun auch. Leider hilft mir das
bei meinem Problem mit dem aktuellen Projekt nicht weiter. Darum poste ich
einfach mal den Codeausschnitt wie ich ihn verwende:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
System.Drawing.Graphics formGraphics = this.CreateGraphics();
System.Drawing.Font drawFont = new System.Drawing.Font("TimesNewRoman"18);
System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat();
drawFormat.Alignment = StringAlignment.Center;
drawFormat.LineAlignment = StringAlignment.Center;

string buffer;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < myClass.iPunkte.Count(); i++) //Bei myClass handelt es sich um eine von mir erstellte Klasse und iPunkte ist eine Liste von integern
{
  buffer = String.Format("{0}.Platz:  {1}\t{2} Punkte", i + 1, myClass.Name[i], myClass.iPunkte[i].ToString()); // Name ist ebenfals eine Liste mit strings
  sb.AppendLine(buffer);
}
formGraphics.DrawString(sb.ToString(), drawFont, drawBrush, Screen.AllScreens[0].WorkingArea, drawFormat);
sb.Clear();
drawFont.Dispose();
drawBrush.Dispose();
formGraphics.Dispose();


Also ich hoffe ihr könnt damit irgendwas anfangen und wie gesagt der Text wird ja auch ausgegeben nur verhält es sich als sei das \t gar nicht da


Ralf Jansen - Mo 14.07.14 20:45

Das mit dem Alignment macht irgendwie keinen Sinn. Entweder zentriert ODER an Tab Grenzen ausgerichtet.
Wenn du an Tabs ausrichten willst lass also das StringFormat weg.


hoxplus - Mo 14.07.14 20:56

DANKE !!!! Es funktioniert!

Hätte man sich aber auch denken können :autsch:


Danke an alle