Hallo liebes Forum,
vor kurzem hab ich ein kleines C#-Projekt gestartet, hier generiere ich per Enter-Taste eine in Abhängigkeit des Textes einer anderen im Designer generierten TextBox, TextBoxen und will von den Im Programmcode generierten TextBox, den Text in eine Excel Datei reinschreiben, wenn ich allerdings dies in den Programmcode schreibe, zeigt er mir einen Fehler an:
Die TextBox heißt in dem Fall TextName0.> Fehlermeldung:
The Name 'TextName0' does not exist in the current context.
Weiß jemand wie ich dies fixe.
Wäre über eine hilfreiche Antwort froh.
Bestimmt, wenn Du uns mit etwas Quellcode versorgst 😉
int anzahl = Convert.ToInt16(Anzahl.Text);
int anzahlArbeiten = Convert.ToInt16(AnzahlArbeiten.Text);
Excel.Application excelDatei = new Excel.Application();
excelDatei.Visible = true;
excelDatei.WindowState = Excel.XlWindowState.xlNormal;
Excel.Workbook excelWorkbook = excelDatei.Workbooks.Add();
Excel.Worksheet excelWorksheet = excelWorkbook.Worksheets["Klasse"];
excelWorksheet.Cells[1, 1] = "Name";
for (int i = 0; i < anzahl; i++)
{
excelWorksheet.Cells[i + 2, 1] = TextName0.Text;
}
excelWorkbook.SaveAs("");
excelWorkbook.Close();
excelDatei.Quit();
Hier wird die Excel Datei erstell.
int y1 = 102;
for (int i = 0; i < anzahl; i++)
{
const int x1 = 16;
TextBox TextName = new TextBox();
TextName.Location = new Point(
x1, y1);
TextName.Visible = true;
this.Controls.Add(TextName);
TextName.Name = "TextName" + i;
y1 += 30;
}
Hier generiere ich die TextBoxen.
Bei dynamisch generierten Controls kannst Du mittels des Namens auf das generierte Control innerhalb der Controls-Collection zugreifen:
for (int i = 0; i < anzahl; i++)
{
excelWorksheet.Cells[i + 2, 1] = this.Controls[TextName0.Name];
}
Siehe auch Control.ControlCollection.Item-Eigenschaft: (String)
Wenn er auf TextName0.Name
zugreifen könnte, dann könnte er auch direkt TextName0.Text
verwenden 😁
Grundsätzlich frage ich mich aber, warum x TextBoxen erstellen, die alle untereinander stehen sollen - also so wie in Excel - dann wäre ein Grid mit einer Spalte irgendwie passender.
Stimmt natürlich, richtig wäre es dann so:
for (int i = 0; i < anzahl; i++)
{
TextBox tb = (TextBox)this.Controls["TextName0"];
excelWorksheet.Cells[i + 2, 1] = tb.Text;
}
Heißt das, dass ich eine neue je nachdem unsichtbare TextBox erstelle, die die alte sozusagen ersetzen soll?
Also es funktioniert jetzt alles so wie es sein sollte, bloß hab ich jetzt das Problem, dass ich beim Testen den Fehler habe, dass der Pfad: C:\Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\bin\signtool.exe nicht verfügbar ist. Ich bin diesem Pfad gefolgt und es war nicht da. Dieser Fehler kommt sowohl beim debuggen als auch beim Publish(auf die Festplatte, habe beides mal ausprobiert, keine Ahnung ob es intelligent ist oder nicht).