this."Variable".Location



  • Visual C# 2010:

    Hallo, leider bin ich in der Suche nicht fündig geworden.

    Ein Hotel hat 5 Zimmer. Diese 5 Zimmer möchte ich nun als 5 groupboxen darstellen. Da ich aber nicht alle Zimmer schon voreingestellt als Groupboxen darstellen will, macht das für mich eine While Schleife. Nun muss ich die "Zimmerbezeichnung" in das Tag this.Zimmer1.Location reinbekommen, siehe Code.

    Reduziert auf das Wichtigste:

    while (ZimmerCounter <= Zimmeranzahl)
            	{
            	ZimmerCounter++;
            	ZimmerBezeichnung = "Zimmer" + ZimmerNummer;
            	this.Zimmer1.Location = new System.Drawing.Point(ZeilenVerschiebung, 20);
            	}
    

    Das Sytem soll die Zeile nun so behandeln:
    this.Zimmer1.Location = new System.Drawing.Point(ZeilenVerschiebung, 20);
    nächstes while:
    this.Zimmer2.Location = new System.Drawing.Point(ZeilenVerschiebung, 20);
    nächstes while:
    this.Zimmer3.Location = new System.Drawing.Point(ZeilenVerschiebung, 20);

    Ich kann keine Variable hinter das this einfügen:
    this.ZimmerBezeichnung.Location = new System.Drawing.Point(ZeilenVerschiebung, 20);

    Wie kann das klappen?

    Danke Mape



  • Bei deiner Umsetzung würde einen Layoutmanager nehmen, oder ein extra Panel, wo alle Zimmer.GroupBoxes über Dock.Top automatisch nacheinander ausgerichtet sind.
    Falls es funktioniert nimm bitte einen der beiden Wege.

    Anfernfalls kann man sich überlegen, ob es noch einen anderen Weg gibt soetwas darzustellen. (Was kommt denn in die GroupBox rein?, kann man nicht eine datengebundene Listbox nehmen, die das gewünschte Zimmer auswählt, und eine Groupbox, die sich je nach der Listbox-Auswahl anpasst?)

    Sonst kannst du die Zimmerobjekte in ein Array a verschieben und dieses dann in der while-Schleife ansprechen: a[i].Location = new System.Drawing.Point(ZeilenVerschiebung, 20) .

    Wenn alles nicht hilft, gibt es noch den schlechten Weg über this.Controls["Zimmer" + i.toString()] , der deine Frage beantwortet, wenn du die Elemente entsprechend umbenannt und die Eingaben validiert hast.



  • Danke für die Antwort, Dein Tip ganz unten klappt aber nicht:

    Zimmernummer= i.ToString();

    this.Controls["Zimmer" + Zimmernummer].name = "Zimmer1";

    Kein guter Tach für mich heute...

    MaPe



  • Nimm mal [c]this.Controls["Zimmer" + Zimmernummer].name = "Zimmer1"; [/c] raus.


Anmelden zum Antworten