Danisynko Geschrieben 10. September 2009 Teilen Geschrieben 10. September 2009 Hiho, ich bin gerade dabei, einen Web Browser zu programmieren. Dazu möchte ich gerne Tabs haben.. mehrere Tabs.. private void buttonNewTab_Click(object sender, EventArgs e) { int iTabCount = 0; //Object WebBrowser webBrowser = new WebBrowser(); iTabCount += 1; TabPage tabPage = new TabPage(); this.tabControl1.TabPages.Add(tabPage); this.tabControl1.SelectedIndex = iTabCount; tabPage.Controls.Add(webBrowser); //Settings webBrowser.Width = tabPage1.Width; webBrowser.Height = tabPage1.Height; webBrowser.Name = "webBrowser" + iTabCount; tabPage.Name = "tabPage" + iTabCount; tabPage.Text = webBrowser.Name; } Das klappt wunderbar. Es werden bei jedem Klick ein neuer Tab mit neuem Web Browser Objekt erstellt ( webBrowser1, webBrowser2, webBrowser3,..,..) Nun habe ich eine Textbox "textBoxUrl" in dem ich den gewünschten Url eintippe. Des weiterem benutze ich einen Button, um folgenden Code auszuführen: private void buttonGoNavigate_Click(object sender, EventArgs e) { webBrowser.Navigate(new Uri(textBoxUrl.Text)); } Für einen Tab mit einem Webbrowser, funktioniert das einwandfrei.... Um mein Problem euch nun zu erläuterten: Ich würde gerne sowas schreiben, sodass der Compiler weis, welchen WebBrowser er navigieren soll --> private void buttonGoNavigate_Click(object sender, EventArgs e) { ("webBrowser" + this.tabControl1.SelectedIndex).Navigate(new Uri(textBoxUrl.Text)); } 1. Geht das nicht, weil es ne komplett falsche syntax ist ^^ und 2. Auch wenn es gehen würde, würde der Compiler beim durchgehen des Codes merken, da ja z.b. webBrowser1 oder 2 oder 3 oder 4 noch garnicht erstellt wurde... Wie soll ich nun das realisieren, sodass ich mit einer Textbox, im zusammenhang mit dem tabControl1.SelectedIndex, das bestimmte WebBrowser objekt navigieren kann? Auf eine Antwort, würde ich mich freuen! mfg Daniel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tiangou Geschrieben 10. September 2009 Teilen Geschrieben 10. September 2009 Zu deiner Programmierweise und Namensgebung sag ich jetzt mal nix Wenn ich das richtig sehe/verstehe hast du eine TextBox und ein Navigate Button für alle Tabs oder? in dem Fall würde ich das dann so machen: private void buttonGoNavigate_Click(object sender, EventArgs e) { Control[] controlArray = this.Controls.Find("webBrowser" + tabControl1.SelectedIndex, true); foreach (Control item in controlArray) { if (item.Name.Equals("webBrowser" + tabControl1.SelectedIndex)) { ((WebBrowser)item).Navigate(textBoxUrl.Text); } } } Musste gerade selber wieder festellen das es "FindControl" nur in ASP.Net gibt ^^ Theoretisch kann mich sich auch die Schleife sparen und nur das Control Array auf länge prüfen, denn mehr als einmal sollte ein Control mit ein und demselben namen nicht auftauchen. Bin mir allerdings gerade nicht ganz sicher ob das Find nicht auch das Control mit dem Namen webBrowser11 zurückgeben würde weil darin der suchbegriff enthalten ist, deshalb die Schleife mit dem Equal. das int iTabCount ist aber eigentlich schon ne Klassenvariable oder? Ansonsten setzt du die nämlich mit jedem "buttonNewTab_Click" wieder zurück und es geht garnicht. Wenn ich dich jetzt falsch verstanden hab, dann musst du es nochmal erklären und die Framework Version nicht vergessen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Danisynko Geschrieben 10. September 2009 Autor Teilen Geschrieben 10. September 2009 Hallo Locotronic, erstmal vielen Dank für deine Antwort! Zitat: Wenn ich das richtig sehe/verstehe hast du eine TextBox und ein Navigate Button für alle Tabs oder? ( Ja das ist richtig ) Die int Variable "iTabCount" ist eine Globale. Habe den Code nicht direkt kopiert, da viele Sachen nicht notwenig waren zu posten ( ist wohl in die falsche zeile gekommen ) Ich benutze Framework Version 3.5 Ich werde dein Beispiel morgen mal testen und dann hier berichten. Zwecks meiner Programmierweise und Namensgebung muss ich dazu sagen, dass jeder mal klein angefangen hatt. Doch dann bitte ich dich drum, mir Tipps zu geben, wie ich diese Fehler verbessern kann.. nur so, kann ich aus meinen Fehlern lernen. MFG Daniel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tiangou Geschrieben 11. September 2009 Teilen Geschrieben 11. September 2009 Zwecks meiner Programmierweise und Namensgebung muss ich dazu sagen, dass jeder mal klein angefangen hatt. Doch dann bitte ich dich drum, mir Tipps zu geben, wie ich diese Fehler verbessern kann.. nur so, kann ich aus meinen Fehlern lernen. Genau das ist der Punkt, ich möchte das nicht unbedingt als Fehler bezeichnen, das ist von Firma zu Firma teilweiße stark unterschiedlich... Aber ich kann dir ja sagen wie ich das mache Also eine Typbezeichnung in Variablen mache ich nicht schon alleine das es bei einem Int zu Verwechslungen kommen kann da ein I vor einem Objekt ein Interface bezeichnet und kein Int und Klassenvariablen (Es gibt nur Klassenvariablen in C# und keine globalen Variablen im Vergleich mit z.B. PHP wo es wirklich Globale gibt) und diese fangen bei mir mit einem _ an somit kann man die Klassenvariablen von den Lokalen unterscheiden. usw. Wenn du das 3.5 Framework benutzt dann würde ich mal schauen ob du nicht mit Linq das gesuchte Objekt abfragen kannst, ich kann grad leider nicht nachschauen da wir hier in der Firma noch das 2.0 Framework einesetzen. Grüße Loco Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.