Steuerelemente mit Index; label[7]

Hallo,
ich versuche mich an C# mit einer Forms-Anwendung und stoße gleich auf ein Problem:
Ich haben mehrere Controls (z.B. Label) angeordnet (in Form, GroupBox, Panel, TableLayoutPanel) und möchte diese über einen Index (z.B. label[7]) ansprechen.Ich bekomm’s nicht hin.In VB6 wurde mir das autom. angeboten, wenn die Steuerelemente in einem Frame waren (erinnere ich mich schwach).

Wer kann mir helfen?
vG
der_kps

Hallo,

das Array musst du dir selbst anlegen. Z.B. im Konstruktor des Fensters. Je nach Technologie (WinForms, WPF…) kannst du die Steuerelemente auch durch ihren Namen abfragen. Das sollte aber nur zum Aufstellen des Arrays genutzt werden, da der Arrayzugriff schneller ist.

Nico

OK,
ein Array für Variablen kann ich anlegen.
Aber mit einem Steuerelement z.B. Label bekomme ich das nicht hin.
Hast du da Beispielcode?

vG
der_kps

Das funktioniert im Prinzip genau so.

Label[] labels = new Label[10]; //evtl. auch eine List

labels[0] = Label0;
labels[1] = Label1;

//oder

for(var i = 0; i 

Hallo.

Wieso sprichst du die Labels nicht per Namen an? Wenn du dir ein Label per Code erstellst, kannst du sagen z.B.:

Label meinlabelname = new Label();
meinlabelname.Text = „Ich zeige was an“;
this.Controls.Add(meinlabelname);

danach kannst es mit „meinlabelname“ z.B.: meinlabelname.Text = „bla“ ansprechen.

Oder verstehe ich jetzt was falsch? :smile:

Hallo!
Muss ich drüber nachdenken und ausprobieren.

Erstmal habe ich mich auf die andere Methode eingeschossen.
Nur die autom. Zuordnung label[1] zu label1 mittels this.Controls[…]
funktioniert nicht.

Danke erstmal!
der_kps

… bin dann doch weiter gekommen; Danke! Aber:
public partial class Form1 : Form
{
Label[] labels; // Referenz damit labels überall bekannt ist

public Form1()
{
InitializeComponent();

Label[] labels = new Label[4]; //Label-Array mit 4 Elementen namens labels
labels[0] = label0;
labels[1] = label1;

}

private void button1_Click(object sender, EventArgs e)
{
labels[1].Text = „neuer Text“; //geht doch!
}

Am Anfang musste noch eine Referenz auf Label[] labels eingefügt werden.

Die automatische Zuordnung verstehe ich jedoch nicht!!
for (int i=0; i
In eckigen Klammern ein label1 basteln ist klar.
Aber die Konvertierung nach Label funktioniert nicht.

Danke
der_kps

Die automatische Zuordnung verstehe ich jedoch nicht!!
for (int i=0; i
In eckigen Klammern ein label1 basteln ist klar.
Aber die Konvertierung nach Label funktioniert nicht.

Stimmt, da fehlt noch ein Cast nach Label:

labels[i] = (Label)this.Controls["label" + i.ToString()]

Hallo!
In jedem Form gibt es von Haus aus eine ControlCollection namens Controls.
Dort werden alle Steuerelemente eingefügt, die auf dem Dialog zu sehen sind.
Beim Zugriff auf einzelne Controls musst Du daher ggf. auf den speziellen Typ (in Deinem Fall also Label) casten.
Gruß,
Martin

Hallo Nico,

ich schließe mich dir an und möchte eine kleine Optimierung für die Initialisierung anbieten:

public partial class Form1 : Form {
 private Label[] labels;

 public Form1() {
 InitializeComponent();
 labels = new Label[] { label1, label2, label3 };
 }

 //....
}

Der Zugriff geht dann natürlich über

labels[0].Text = "My first label";

usw.

Hallo,
mit dem Cast (Label) funktioniert es; Danke!
Ich musste nur noch this durch GroupBox1 ersetzten, da meine Label dort eingebaut sind.

By the way: Gibt es eine Möglichkeit, das vorhandene Projekt unter anderem Namen zu speichern? Dan könnte ich ein funktionierendes Projekt ablegen und mit an einer Kopie mit Änderungen versuchen.

vG
der_kps

By the way: Gibt es eine Möglichkeit, das vorhandene Projekt unter anderem Namen zu speichern? Dan könnte ich ein funktionierendes Projekt ablegen und mit an einer Kopie mit Änderungen versuchen.

Was spricht dagegen, den Ordner einfach zu kopieren?

Ansonsten könntest du auch Versionierungstools nutzen, die dir gestatten, auf vorherige Versionen zuzugreifen. In Visual Studio bietet sich der Team Foundation Dienst an (http://www.visualstudio.com/products/visual-studio-o…), für kleine Projekte kostenfrei. Abseits davon gibt es z.B. noch Git und SVN. Für beide Systeme gibt es einige kostenlose Anbieter. Git könntest du auch ganz ohne Provider betreiben, also nur als lokales Repository.

Nico

Hallo,
Ordner kopieren?!
So mache ich das auch, scheint mir aber zu banal.
Aber jetzt mache ich erstmal weiter mit meinen 1. Projekt.
Ich denke, man hört wieder voneinander :wink:

vg
der_kps