Entwickler-Ecke
WinForms - Firefox nachbauen mit tabControl1
AlanWake - Fr 24.09.10 15:27
Titel: Firefox nachbauen mit tabControl1
Hallo Leute,
ich bins mal wieder :)
Heute versuche ich den Webbrowser Firefox nachzubauen, bis jetzt habe ich folgendes:
C#-Quelltext
1: 2: 3: 4: 5:
| WebBrowser NewBrowser = new WebBrowser(); TabPage NewTabPage = new TabPage(); tabControl1.TabPages.Add(NewTabPage); NewBrowser.Dock = DockStyle.Fill; NewTabPage.Controls.Add(NewBrowser); |
Was mir bei meinem Code noch fehlt, ist: 1. Das das erstellte Tab auch gleich selektiert wird.
2. Das immer der Text in einer Textbox der aktuelle URL für das selektierte Tab ist.
Und 3. Das immer der aktuelle URL aus dem augewählten Tab in der Textbox steht :)
Mit diesem Code kann ich den Text eine Textbox als URL nehmen:
C#-Quelltext
1:
| this.webBrowser1.Url = new System.Uri(this.toolStripComboBox1.Text, System.UriKind.RelativeOrAbsolute); |
Und mit diesem Code lasse ich immer den aktuellen URL in der Textbox anzeigen:
C#-Quelltext
1:
| toolStripComboBox1.Text = webBrowser1.Url.AbsoluteUri; |
Bin dankbar für jede Hilfe :)
gruß Alan
AlanWake - Sa 25.09.10 13:18
Hi,
danke für deine schnelle Antwort :)
Habe jetzt 2 Probleme :(
Das erste ist, das ich irgendwie diesen Link nicht kapiere :cry:
http://msdn.microsoft.com/de-de/library/system.windows.forms.tabcontrol.selectedindexchanged%28v=VS.80%29.aspx
Kannst du mir ein Code Beispiel geben :?:
Das 2 wäre wenn ich meinen Code in die Button1_Click schreibe aber den Code um einen URL zu bestädigen in die Button2_Click schreibe, dann aber der NewBrowser den ich erstellt habe in der Button1_Click im aktuellen Kontext der Button2_Click nicht verfügbar ist :(
Gibt es da eine Möglichkeit das der NewBrowser für alle private voids verfügbar ist :?:
gruß Alan
ps. Das mit dem neuestem Tab selektieren habe ich hinbekommen :)
C#-Quelltext
1: 2: 3: 4: 5: 6:
| WebBrowser NewBrowser = new WebBrowser(); NewBrowser.Dock = DockStyle.Fill; TabPage NewTabPage = new TabPage(); tabControl1.TabPages.Add(NewTabPage); NewTabPage.Controls.Add(NewBrowser); tabControl1.SelectedTab = NewTabPage; |
Yogu - Sa 25.09.10 17:11
Nein, denn man braucht nicht mal Code: Wähle das TabControl aus, gehe ins Eigenschaften-Fenster, klicke dort auf den Blitz (Ereignisse), suche das Ereignis
SelectedIndexChanged und doppelklicke darauf. Jetzt hast du eine Methode, die aufgerufen wird, wenn der Benutzer eine andere Seite auswählt.
AlanWake hat folgendes geschrieben : |
Das 2 wäre wenn ich meinen Code in die Button1_Click schreibe aber den Code um einen URL zu bestädigen in die Button2_Click schreibe, dann aber der NewBrowser den ich erstellt habe in der Button1_Click im aktuellen Kontext der Button2_Click nicht verfügbar ist :(
Gibt es da eine Möglichkeit das der NewBrowser für alle private voids verfügbar ist :?: |
Das würde nicht zum Ziel führen, denn dann könntest du ja immer nur auf den zuletzt erstellten Browser zugreifen.
Stattdessen muss der WebBrowser irgendwie mit der TabPage verknüpft werden. Dafür könntest du zum Beispiel die Eigenschaft
Tag der TabPage verwenden:
C#-Quelltext
1:
| TabPage.Tag = NewBrowser; |
Um wieder darauf zugreifen zu können, musst du den Tag, der vom Typ
Object ist, in einen WebBrowser umwandeln:
C#-Quelltext
1:
| WebBrowser webBrowser = tabControl1.SelectedTab.Tag as WebBrowser; |
AlanWake - Sa 25.09.10 20:11
Wenn ich versuche ein neues Tab hinzuzufügen bekomme ich immer die Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt :cry:
Und bei TabPage.Tag = NewBrowser; erkennt mein Programm nicht das Wort TabPage an :(
Das ist was ich bis jetzt habe:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { WebBrowser webBrowser = tabControl1.SelectedTab.Tag as WebBrowser; textBox1.Text = webBrowser.Url.AbsoluteUri; }
private void button1_Click(object sender, EventArgs e) { WebBrowser NewBrowser = new WebBrowser(); NewBrowser.Dock = DockStyle.Fill; TabPage NewTabPage = new TabPage(); tabControl1.TabPages.Add(NewTabPage); NewTabPage.Controls.Add(NewBrowser); tabControl1.SelectedTab = NewTabPage; }
private void button2_Click(object sender, EventArgs e) { NewBrowser.Url = new Uri(textBox1.Text); } |
Ich wollte eigentlich auf Button 1 ein neues Tab erstellen und auf Button 2 den URL von der Textbox bestätigen :)
Aber bestimmt mache ich mal wieder alles falsch oder schreibe es in die falschen Felder :cry:
gruß Alan
Yogu - Sa 25.09.10 20:16
AlanWake hat folgendes geschrieben : |
| Und bei TabPage.Tag = NewBrowser; erkennt mein Programm nicht das Wort TabPage an :( |
Stimmt, das heißt bei dir ja
NewTabPage.
AlanWake hat folgendes geschrieben : |
| Wenn ich versuche ein neues Tab hinzuzufügen bekomme ich immer die Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt :cry: |
Der Fehler sollte nicht mehr auftreten, sobald du den oberen behoben hast :)
AlanWake - Sa 25.09.10 20:30
Beim Button 2 wird NewBrowser nicht erkannt weil es im aktuellen Kontext nicht verfügbar ist, wenn ich die Zeile dann lösche und versuche im Debug nur eine neue Tabpage zu erstellen bekomme ich bei der Zeile textBox1.Text = webBrowser.Url.AbsoluteUri; wieder die Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt :cry:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { WebBrowser webBrowser = tabControl1.SelectedTab.Tag as WebBrowser; textBox1.Text = webBrowser.Url.AbsoluteUri; }
private void button1_Click(object sender, EventArgs e) { WebBrowser NewBrowser = new WebBrowser(); NewBrowser.Dock = DockStyle.Fill; TabPage NewTabPage = new TabPage(); NewTabPage.Tag = NewBrowser; tabControl1.TabPages.Add(NewTabPage); NewTabPage.Controls.Add(NewBrowser); tabControl1.SelectedTab = NewTabPage; }
private void button2_Click(object sender, EventArgs e) { NewBrowser.Url = new Uri(textBox1.Text); } |
gruß Alan
Yogu - Sa 25.09.10 20:53
AlanWake hat folgendes geschrieben : |
Beim Button 2 wird NewBrowser nicht erkannt weil es im aktuellen Kontext nicht verfügbar ist
C#-Quelltext 18: 19: 20: 21:
| /* ... */ private void button2_Click(object sender, EventArgs e) { NewBrowser.Url = new Uri(textBox1.Text); } | |
Na, dort musst du natürlich auf die gleiche Weise auf den Browser zugreifen. Hast du das Prinzip überhaupt verstanden?
Wir müssen den Browser irgendwie mit der TabPage verknüpfen, damit wir jederzeit darauf zugreifen können. Also speichern wir eine Referenz auf den Browser in der Tag-Eigenschaft der TabPage. Überall, wo wir den Browser benötigen, holen wir ihn uns wieder heraus.
AlanWake hat folgendes geschrieben : |
| wenn ich die Zeile dann lösche und versuche im Debug nur eine neue Tabpage zu erstellen bekomme ich bei der Zeile textBox1.Text = webBrowser.Url.AbsoluteUri; wieder die Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt :cry: |
Nicht weinen, lieber mal überlegen, was der Debugger hier eigentlich will. Er meint, irgendein Objektverweis ist nicht festgelegt. Zu Deutsch: irgendeine Variable oder Eigenschaft ist
null. Fahre einfach mal mit der Maus über die Bezeichner und schaue, was genau
null ist, vielleicht kannst du dann eine Fehlerbehandlung einbauen, die diesen Fall abfängt :think:
AlanWake - Sa 25.09.10 21:09
Hi, habe vielleicht sogar noch was besseres herausgefunden:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void button1_Click(object sender, EventArgs e) { TabPage NewTabPage = new TabPage(); tabControl1.TabPages.Add(NewTabPage); tabControl1.SelectedTab = NewTabPage; }
private void button2_Click(object sender, EventArgs e) { WebBrowser NewBrowser = new WebBrowser(); NewBrowser.Dock = DockStyle.Fill; tabControl1.SelectedTab.Controls.Add(NewBrowser); NewBrowser.Url = new Uri(@"http://" + textBox1.Text); } |
Mit dem Button 1 erstelle ich immer ein neues Tab und mit dem Button 2 erstelle ich einen NewBrowser und gehe gleich ins Netz mit dem URL den ich in der Textbox geschrieben habe, nur jetzt habe ich leider das Problem das der NewBrowser nur im Kontext der Button 2 Click ist, also wenn ich auf einem anderen Button: NewBrowser.GoBack(); programmieren will geht das nicht mehr :(
Gibt es da eine Möglichkeit, die GoBack Methode auf dem selektierten Tab anzuwenden :?:
gruß Alan
Yogu - Sa 25.09.10 21:26
AlanWake hat folgendes geschrieben : |
| Mit dem Button 1 erstelle ich immer ein neues Tab und mit dem Button 2 erstelle ich einen NewBrowser und gehe gleich ins Netz mit dem URL den ich in der Textbox geschrieben habe |
Du erstellst für jede Adressänderung einen neuen WebBrowser und legst ihn einfach über den alten? Bedenke, der alte wird weder vom Formular, noch aus dem Speicher gelöscht! :o
AlanWake hat folgendes geschrieben : |
nur jetzt habe ich leider das Problem das der NewBrowser nur im Kontext der Button 2 Click ist, also wenn ich auf einem anderen Button: NewBrowser.GoBack(); programmieren will geht das nicht mehr :(
Gibt es da eine Möglichkeit, die GoBack Methode auf dem selektierten Tab anzuwenden :?: |
Hörst du mir eigentlich zu? Ich habe dir in den letzten drei Posts versucht zu erklären, wie du genau dieses Problem lösen kannst. Am besten liest du dir alles nochmal durch. Wenn es dir dann immer noch spanisch vorkommt, stelle gezielte Fragen oder lies dir erst einmal ein Tutorial durch, z.B. das
Galileo OpenBook [
http://openbook.galileocomputing.de/csharp/].
AlanWake - Sa 25.09.10 21:32
Weißt du was, vergiss es.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!