Laden...

Problem mit eigenem kleinem Webbrowser

Erstellt von Johnny B vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.154 Views
J
Johnny B Themenstarter:in
47 Beiträge seit 2010
vor 13 Jahren
Problem mit eigenem kleinem Webbrowser

Hallo!

Bin ein ziemlicher Newbie was Windows Forms programmierung angeht.
Hab ein paar hoffentlich lösbare Probleme wo ich nicht mehr weiter weiß!

Das ist eigentlich mein ziemlich erstes Windows Programm womit ich mich intensiver beschäftige. Es soll ein kleiner feiner Webbrowser werden.

  1. Problem: Ich habe einen "Startseite" Button der mir beim Klick www.google.at öffnet.
    Ich möchte nun dass beim Start des Browsers automatisch gleich die Startseite geöffnet wird. Dazu müsste ich ja nur die Methode
private void home_Click(object sender, EventArgs e)
        {
            Browser.Navigate("http://www.google.at");
            Adressfeld.Text = "http://www.google.at";
        }

aufrufen.
Weiß aber nicht wie (Probleme sind: Eventhandler, Methodenüberladung etc...kenn mich da nicht wirklich aus)
Hatte es versucht so zu lösen. Passiert aber gar nix.:

public Kassabuch()
        {
            InitializeComponent();
            home.Click += new EventHandler(home_Click);
        }
  1. Problem: Ich habe einen "vor" und einen "zurueck" Button der mich durch das Web navigiert. Das sieht so aus:
private void vor_Click(object sender, EventArgs e)
        {
            Browser.GoForward();
            Adressfeld.Text = Convert.ToString(Browser.Url);

Problem darin ist dass mir im Adressfeld nach dem Schritt vor aber nicht die URL der vorigen Seite angezeigt wird sondern die aktuelle URL.

Das wäre erstmal das gröbste.
Hoffe ich habe mich verständlich ausgedrückt.

MfG
Johnny B

A
118 Beiträge seit 2009
vor 13 Jahren

Hallo,

  1. Nimm doch einfach das Form_Load- Event.

  2. Ich hab ehrlich gesagt nicht verstanden, was genau das Problem ist.... X(

D
42 Beiträge seit 2010
vor 13 Jahren

hallo jonny_b,

du könntest für das erste problem einfach eine methode erstellen die dann in


private void Form1_Load(object sender, EventArgs e)
{
home();
}

aufgrufen wird.

private void home()
{
            Browser.Navigate("http://www.google.at");
}

und für das Rückwärtsnavigieren gibt es eine Browser.GoBackward(); Methode (oder so ähnlich)... Wenn Du die angesteuerten Links verwalten möchtest, dann würde sich anstelle einer TextBox wohl eine ComboBox besser eignen - da fügst Du die Links als Item hinzu...

J
Johnny B Themenstarter:in
47 Beiträge seit 2010
vor 13 Jahren

Was meinst du mit Form_Load Event? (sry aber bin echt newbie^^)

Dachte ich kann einfach nach "InitializeComponent(); auf die Methode home_Click() zugreifen.

public Webbrowser()
        {
            InitializeComponent();
           home_Click();
        }

Nur muss ich die Methode irgendwie überladen? Verstehe aber nicht wirklich welche Parameter ich eintragen soll.

Nochmal zum 2. Problem:
Beispiel: Ich habe die google.com Seite geöffnet. Im Adressfeld steht: http://www.google.com.
Nun öffne ich die Seite auf www.test.com und gehe mit dem Zurückbutton zurück.
Es wird zwar google.com geöffnet im Adressfeld bleibt aber die Url "www.test.com".
Klicke ich nochmals auf den Zurückbutton bleibt google.com geöffnet und es aktualisiert sich** erst jetzt **der Text des Adressfeldes.

Dieser Fehler tritt eben mit foglendem Code auf. Wüsste aber nicht wo da der Fehler begraben ist.:

private void zurueck_Click(object sender, EventArgs e)
        {
            Browser.GoBack();
            Adressfeld.Text = Convert.ToString(Browser.Url);
        }

MFG

D
42 Beiträge seit 2010
vor 13 Jahren

das formload event erstellst du automatisch wenn du ein doppelklick auf die form machst ( an einer stelle wo keine anderen controls sind)... in diesen event kann code eingefügt werden, den du gerne beim starten der form ausgeführt haben möchtest...

bei dem event home_click handelt es sich um ein event dass beim clicken des buttons ausgelöst wird - nur dann wird der code ausgeführt... schreib lieber eine "normale" methode und lasse die durch das event aufrufen...

wenn du im goback aufrufst, dann brauch der browser eine weile bis die seite geladen ist, es gibt ein event dass dir "bescheid gibt" wenn der browser die seite fertig geladen hat. in diesem event solltest du das adressfeld aktualisieren...

699 Beiträge seit 2007
vor 13 Jahren

Hallo Johny B,

Was meinst du mit Form_Load Event? (sry aber bin echt newbie^^)

Dachte ich kann einfach nach "InitializeComponent(); auf die Methode home_Click() zugreifen.

Will jetzt nicht gemein wirken. Aber so gesehen fehlen Dir massiv Grundlagen, welche Du dir erst einmal mit einem Buch aneignen solltest.

Hier mal ein paar Links dazu:
Galileo OpenBook "Visual C# 2008" 🛈Guide to C# 📗[Hinweis] Bitte schau in die SDK-/MSDN-Doku :rtfm:

Wenn Du dann ein bestimmtes Problem haben solltest, bei dem Du hängst, wird Dir hier sicher schnell weiter geholfen.

Zu deinem Problem:


public Webbrowser()
        {
           InitializeComponent();
           // home_Click();  // falsch
           Home();
        }

private void home_Click(object sender, EventArgs e)
        {
            Home();
            
        }

private void Home()
{
      Browser.Navigate("http://www.google.at");
      Adressfeld.Text = "http://www.google.at";
}

Das sollte zumindest mal dein jetziges Problem lösen.

Grüße Stephan

J
Johnny B Themenstarter:in
47 Beiträge seit 2010
vor 13 Jahren

Vielen Dank für Eure Antworten.
Werde es bald umsetzen zu probieren.

Wegen dem Form_Load Event.

Es gibt ja auch noch die Klasse (ich denke es ist eine Klasse):

public Webbrowser()
        {
            InitializeComponent();

        }

Was genau passiert denn bei InitializeComponent();? Ist es nicht auch ähnlich wie Form_Load(...)?

MfG

J
Johnny B Themenstarter:in
47 Beiträge seit 2010
vor 13 Jahren

Hallo nochmal!

Habe jetzt einen Menüpunkt implementiert der mir ein weiteres Formular (formular2) öffnet wo man in einer Textbox die Startseite eintragen kann. Mit Klick auf einen OK-Button wird das Unterformular geschlossen und im Browser die eingegebene Startseite geöffnet. Dazu will ich auf die Methode Home() (formular1) zugreifen was mir aber nicht möglich ist.

Home() ist so wie von Stipo vorgeschlagen umgesetzt, nur dass die Adresse halt in einer Variable "homeAdress" gespeichert ist! Die Methode ist public.

Hab mir erstmal im Formular 2 eine instanz von Formular 1 gemacht:

form1 mybrowser = new form1();

Dann würde ich so auf Home() zugreifen:

mybrowser.Home();

Fehlermeldung:

Stack Overflow wurde nicht behandelt. (Verweis auf die Instanziierung)

??? Klingt verdammt komisch

Hoffe ihr könnt mir noch einmal helfen, danach werde ich mich erstmals in Bücher vertiefen. 😉

LG
Johnny

699 Beiträge seit 2007
vor 13 Jahren

Hallo,

hier noch 2 Links, mit denen Du deinem Fehler auf die schliche kommen wirst:

[FAQ] Kommunikation von 2 Forms
[FAQ] Eigenen Event definieren / Information zu Events

Ansonsten bleibt nur zu sagen [Hinweis] Wie poste ich richtig? 1.1.1

Grüße Stephan

J
Johnny B Themenstarter:in
47 Beiträge seit 2010
vor 13 Jahren

Danke!

LG

1.373 Beiträge seit 2004
vor 13 Jahren

Hallo,

Zu deinem GoBack/GoForward Problem: schau dir mal die "Note" Box in der Dokumentation von WebBrowser.Url an. Der Wert der Url wird nicht direkt bei Navigate/GoForward/GoBackward geändert, sondern erst, wenn der Browser das Dokument geladen hat. Darüber kannst du im DocumentCompleted Event informiert werden (probier ggf. auch mal Navigated, laut dem Beispiel dort müsste es auch schon in dem Event gehen).

Grüße,
Andre

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Johnny B,

Hoffe ihr könnt mir noch einmal helfen, danach werde ich mich erstmals in Bücher vertiefen. 😉

nein, bitte immer andersherum. Also immer erst Bücher und Doku, dann fragen. Bitte nutze nicht unsere Gutmütigkeit aus, sondern halte dich von dir aus an [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore