Also in meinem Projekt muss ich eine TXT-Datei lesen, die aus "." S und "#" besteht. Diese .txt-Datei ist die Karte für ein Labyrinth. Die # sind unpassierbare Objekte und die.'s sind Gegenstände, die gesammelt werden können.So erstellen Sie ein Grafikobjekt in einem Etikett
Ich habe es bereits geschafft, im Text zu analysieren und eine TableLayoutPanel
zu erstellen, die Label
Steuerelemente enthält, die die # und.'s enthalten. Ich möchte jedoch die .s durch Kreise ersetzen, die in der Zelle zentriert sind.
Wie mache ich das? Hier ist was ich habe.
public class Import: TableLayoutPanel
{
public int zeilen, spalten;
TableLayoutPanel tlp = new TableLayoutPanel();
public TableLayoutPanel getData(string path)
{
StreamReader sr;
TableLayoutPanel tlp = new TableLayoutPanel();
tlp.Dock = DockStyle.Fill;
tlp.CellBorderStyle = 0;
if (File.Exists(path))
{
try
{
using (sr = new StreamReader(path))
{
spalten = Int32.Parse(sr.ReadLine().Trim());
zeilen = Int32.Parse(sr.ReadLine().Trim());
TableLayoutColumnStyleCollection Columns = tlp.ColumnStyles;
TableLayoutRowStyleCollection Rows = tlp.RowStyles;
foreach (ColumnStyle Column in Columns)
tlp.ColumnStyles.Add((new ColumnStyle(SizeType.Percent, 100.0F/Convert.ToSingle(spalten))));
foreach (RowStyle Row in Rows)
tlp.RowStyles.Add((new RowStyle(SizeType.Percent, 100.0F/Convert.ToSingle(zeilen))));
for (int i = 1; i <= zeilen; i++)
{
string line = sr.ReadLine();
for (int j = 1; j <= spalten; j++)
{
Label l = new Label();
tlp.Controls.Add(l, j-1, i-1);
l.Dock = DockStyle.Fill;
l.Text = line.Substring(j-1, 1);
l.Name = "l" + i.ToString() + "r" + (j).ToString();
if (line.Substring(j - 1, 1) == "#")
l.ForeColor = Color.Green;
if (line.Substring(j - 1, 1) == ".")
{
l.ForeColor = Color.Blue;
Graphics g = l.CreateGraphics();
g.DrawEllipse(new Pen(Color.Blue), l.Location.X, l.Location.Y, tlp.Width, tlp.Height);
}
}
}
return tlp;
}
}
catch(Exception e) { MessageBox.Show(e.Message); MessageBox.Show(e.StackTrace); return null; }
}
else
return null;
}
Alles wie das sollte in dem Paint-Ereignis getan werden, jedoch empfehle ich Ihnen, eine grafikfreundlichere Umgebung wie WPF anstelle von WinForms zu verwenden – Steve
Leider muss ich Winforms in diesem Fall verwenden (die Aufgabe besagt, dass ich habe zu).Ich habe versucht, ein Grafik-Ereignis zu verwenden, aber ich weiß nicht, wie ich die Speicherorte der spezifischen Zellen von. Hast du eine Idee, wie ich das machen könnte? – coding4life