2016-04-16 5 views
0

ich mehrere Dinge in einer Textbox in meiner Software und seine gerade aus Druck 1/5finden wir weitere Iterationen in einer hinzuzufügen for-Schleife C# Machen Sie meine Schleife abholen mehr

Ich glaube, ich habe zu zeigen versuche, die für Schleife alles durcheinander, so hier ist, wie es aussieht

var getTopFive = new FirefoxDriver(); 
getTopFive.Navigate().GoToUrl("https://www.tradingview.com/"); 

IList<IWebElement> movies = getTopFive.FindElements(By.CssSelector("tbody tr")); 

for (int i = 0; i < 1; ++i) 
{ 
    activeTextBox.Text = movies[i].Text; 
} 

Dies ist, was ich versucht und mit versagt.

ich versuchte, eine andere

activeTextBox.Text = movies[i].Text; 

Zugabe Was nicht

Ich habe versucht, funktionierte auch einen zweiten Block aus dem gleichen Code hinzufügen an der Spitze zeigte aber mit einem anderen Namen für den int usw.

Dann habe ich versucht, ein anderes hinzuzufügen, wenn darunter, was mir einen anderen Fehler gab.

Also meine Frage ist, wie mache ich die Schleife durchlaufen alle 5 Elemente, anstatt nur die erste, die es durch diese Codezeile hier tut.

for (int i = 0; i < 1; ++i) 
{ 
    activeTextBox.Text = movies[i].Text; 
} 
+0

Nicht sicher, warum dies abgelehnt wurde, da es eine gut gestellte Frage ist. Anfänger können Tutorials und Bücher verwenden und tun dies auch, sind aber genauso abhängig von ihrer Unterstützung durch Kollegen wie ihre erfahreneren Kollegen. –

Antwort

4

Es gibt zwei Probleme hier. Die erste ist Ihre For-Schleife wird nur einmal passieren, weil for(int i = 0; i < 1; i++).

Um mehr als einmal zu loopen, müssen Sie auf 1 zu etwas anderem wechseln. Wenn Sie es dynamisch möchten, verwenden Sie for(int i = 0; i < movies.Count; i++).

Die zweite Ausgabe ist activeTextBox.Text wird jedes Mal überschrieben, wenn Sie darauf schreiben. Egal, wie oft Sie die Schleife oder die Linie wiederholen, das einzige, was das Textfeld anzeigt, ist das letzte Element in der Schleife.

Wenn Sie es möchten alle Elemente anzuzeigen, benötigen Sie so etwas wie zu tun: activeTextBox.Text += movies[i].Text + "\n";

Die \n wird setzen jeden Film in einer separaten Zeile - Sie einen Bindestrich oder ähnliches verwenden könnte jedes Element zu trennen.

+0

Ich versuchte dieses, es legte nicht alle von ihnen auf unterschiedliche Linien aber es fügte alle von ihnen so danke hinzu! Ich gehe davon aus, dass es die + = war, die sie alle hinzufügen, also zum Beispiel wenn das Element gleich (=) ist, sagt es 1, es ist okay, das richtige lässt weitergehen und (+) ein weiteres hinzufügen und Schleifen bis zum 5.? –

+0

Ja, es ist die '+ =', die jeden Film an das Textfeld anfügt. Ich dachte "\ n" würde es auf jeder Zeile geben, aber vielleicht unterstützt das Textfeld das nicht. Bindestriche sollten aber funktionieren :-) –

1

Versuchen Sie diesen Code verwenden (vergessen Sie nicht using System.Linq; hinzufügen):

activeTextBox.Text = string.Join("; ", movies.Select(x => x.Text)); 

Erläuterung: jede IWebElement (Film)

movies.Select(x => x.Text) nimmt und zurück seine Text Eigenschaft. Sie erhalten also eine Liste von Filmnamen anstelle von IWebElement Objekten.

Als nächstes verbinden Sie diese Filme zusammen in einer einzigen Zeichenfolge, getrennt durch Semikolon. (string.Join("; ", ...))

Und dann weisen Sie das Ergebnis der activeTextBox zu.

+0

Das scheint sehr kompliziert, würde es Ihnen etwas ausmachen zu erklären, wie es funktioniert? :-) –

+0

@VinnyGarcia Ich habe eine Erklärung zu meiner ursprünglichen Antwort hinzugefügt =) –

+0

Scheint schwierig, aber ich denke das ist ein Weg zu gehen! : D –

3

IList hat eine Eigenschaft namens Count. Diese Eigenschaft gibt die Anzahl der Elemente in der Liste zurück. Verwenden Sie es in der Schleife wie diese alle Filme zeigen:

for (int i = 0; i < movies.Count; i++) 
{ 
    activeTextBox.Text = movies[i].Text; 
} 

Ein zweiter Weg, um eine foreach-Schleife wie folgt zu verwenden:

foreach (IWebElement WebElement in movies) 
{ 
    activeTextBox.Text = WebElement.Text; 
} 

Erinnern Sie Ihren Text überschreiben jede Schleife. Am Ende wird Ihr Text das letzte Element Ihrer Schleife sein. Wenn Sie die Namen hintereinander hinzufügen möchten mögen es diese (mit einem Minus getrennt)

activeTextBox.Text += " - " + movies[i].Text; 

oder diese

activeTextBox.Text += " - " + WebElement.Text 

klar, dass der Text vor der Schleife mit

activeTextBox.Text.Clear(); 
+0

Das war eine sehr klare und einfache Erklärung, würde es Ihnen etwas ausmachen, mir zu sagen, warum der We.Text, was macht das "Wir"? –

+0

Vielen Dank. Der We.Text war ein Fehler. Ich habe es korrigiert. Ich hoffe es hilft. – Fruchtzwerg

+0

wie ich zu dem anderen Typen gesagt habe, gehe ich davon aus, dass es die + = war, die sie alle addieren, also zum Beispiel, wenn das Element gleich ist (=) zu 1, sagt es okay, das richtige lässt weitergehen und addiere (+) ein anderes und schleife bis zum 5. –

Verwandte Themen