Ich gehe vorsorglich schonmal in Deckung, aber ich habe ein ganz dämliches Problem.
Wenn ich die Drucker wie folgt auslese, dann funktioniert das super:
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
label1.Text += printer + "\n";
}
Nur leider steht vor dem ersten Drucker das "label1.Text". Wie bekomme ich das weg?
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
Im einfachsten Fall kannst du das auch auf eine Zeile mit String.Join umschreiben.
label1.Text = String.Join('\n', System.Drawing.Printing.PrinterSettings.InstalledPrinters);
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Grundlagen C# 🙂
Beim ersten Durchlauf ist Text
null, damit wird beim ersten Concat ToString
des Objekts (hier Label) aufgerufen, das den Instanz-Name liefert.
Lösung: Text vorher auf "" setzen.
Kann man übrigens auch super easy via Debugger raus finden.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke Abt. Jetzt wo du es schreibst...
Ich habe in eine komplett andere Richtung gedacht und gesucht, nämlich entweder nach einer Einstellung für das Label (Visible brachte nichts) oder einen Befehl.
Das war definitiv "zu einfach", weil "zu kompliziert" gedacht.
Aber wenn ich jetzt eh schon dabei bin mich zu blamieren: Gibt es eine Möglichkeit alle Labels die "label1" heißen auf "" zu setzen? Ich meine das was man bei "Text" einträgt, nicht bei "(Name)".
IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6
Aber wenn ich jetzt eh schon dabei bin mich zu blamieren: Gibt es eine Möglichkeit alle Labels die "label1" heißen auf "" zu setzen? Ich meine das was man bei "Text" einträgt, nicht bei "(Name)".
Was soll der Sinn sein?
Füge noch ein Label in das Formular und es wird automatisch „label2“ heißen. Und dann möchtest du das ganze auch für „label2“ haben.
Und wenn man gut lesbaren, selbsterklärenden Code hat, dann hat man kein „label1“ oder „label2“, sondern z.B. „printerNamesLabel“.
Deine Liste wird so länger und länger.
Eigentlich musst du nur vor der Schleife den Text des Labels auf string.Empty setzen.
Aber wenn ich jetzt eh schon dabei bin mich zu blamieren: Gibt es eine Möglichkeit alle Labels die "label1" heißen auf "" zu setzen? Ich meine das was man bei "Text" einträgt, nicht bei "(Name)".
Fällt unter [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls
Im Endeffekt hast Du eine Vielzahl von Problemen und Folgeprobleme, die nur existieren, weil Du etwas bzw. "sehr" unstrukturiert vorgehst.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code