Anzeige von strings aus einer Liste einzeln in ein label
Ich ein label haben. Ich habe eine Liste. wenn ich "label1.Text = entsprechen.Wert;", es zeigt nur das Letzte Element der Liste, im Gegensatz zu 1-string, das ändert sich jedes mal, wenn ich auf eine Schaltfläche klicken. Der code ist:
private void frontPageToolStripMenuItem_Click(object sender, EventArgs e)
{
const string url = "http://reddit.com/r/pics";
var source = getSource(url);
var regex = new Regex([regex removed]);
var links = new List<string>();
var titles = new List<string>();
foreach (Match match in regex.Matches(source))
{
links.Add(match.Groups[1].Value);
titles.Add(match.Groups[2].Value);
}
foreach (var title in titles)
{
label1.Text = title; /*it just shows the last 'title' in 'titles', I want it to start at the first, and go to the next title every time the event occurs (frontPageToolStripMenuItem_Click)*/
}
}
Vielen Dank im Voraus!
- Titel sollte ein globaler var, bauen Sie es beim laden der form. Im click-event-handler sollten Sie nur verschieben, die Titel auf den nächsten Wert.
- Dein code wird sofort ausgeführt. Es gibt keinen Grund für
foreach
loops zu gehen, nur, indem ein element für jeden button klicken, also warum sollten Sie? Stattdessen, Sie Durchlaufen die ganze Aufzählung, also das Letzte element bleibt. Wenn Sie wollen Schritt für Schritt Vorgehen, haben Sie, um zu speichern, der aktuelle Fortschritt irgendwo außerhalb Ihrer Methode. - label1.Text += Bezeichnung + " ";
InformationsquelleAutor Lavi | 2012-11-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zum initialisieren der Liste, die außerhalb Ihres click-Ereignishandler. Sie könnte einen
FetchImageData
Methode, die aufgerufen wird, wenn das Programm startet (vielleicht nennen Sie es aus dem Konstruktor der Klasse). Oder man könnte es die list der ersten Zeit das click-Ereignis ausgelöst.Du noch nicht gesagt, was passieren soll, wenn der Benutzer klickt mehrere Male als Elemente. Eine option ist die wrap-around-und beginnt wieder von vorne. Dies kann erreicht werden durch die
%
Betreiber.UI-thread nicht die chance bekommen, aktualisieren Sie das Etikett, da deine for-Schleife ist auf dem UI-thread. Selbst wenn Sie bewegen Sie die for-Schleife in einen hintergrund-thread eine gute chance, die Sie 'll sehen nur einige zu flackern und dann die Letzte saite. Fügen Sie einfach die Saiten auf ein textbox-oder Ausgabe mit Debug.writeLine. Dies wird Ihnen zeigen, dass Sie Lesen die richtigen Saiten.
So ändern Sie die Bezeichnung einfach mal tun Sie es nicht in einer for-Schleife
1)
titles
sollten Globale variable2) Verschieben Sie diese in den Konstruktor der form
3) die event-handler sollte wie folgt sein:
In der Zweiten
foreach
Schleife setzenlabel1.Text += title;
stattlabel1.Text = title;
dann wird es funktionieren.