Du bist nicht angemeldet.

Werbeanzeige

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

1

10.08.2009, 22:45

C#:System.Windows.Forms.Webbrowser- Klick auf Link:IE öffnet

Hallo Leute, ich hab ein Problem, ja mal wieder...

Ich möchte in einem C#-Programm einen kleinen Webbrowser zur Verfügung stellen, als MDI-Fenster, jetzt hab ich ein Klasse Webbrowser : Form, die eine System.Windows.Forms.ComboBox zur Addresseingabe und ein System.Windows.Forms.Webbrowser enthält. Wenn ich jetzt auf einen Link klicke, der sich in einem neuen Fenster öffnet, oder auf "In neuem Fenstre öffnen" im ContextMenü klicke, öffnet sich das im Internet Explorer, das will ich verhindern, und stattdessen ein neues MDI-Fenster meines Webbrowsers erstellen, ich bin jetzt schon so weit, dass ich im Ereignis NewWindow des System.Windows.Forms.Webbrowser folgenden Code habe:

Quellcode

1
2
3
4
5
6
7
        private void Browser_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            Webbrowser wb = new Webbrowser();
            wb.MdiParent = this.MdiParent;
            wb.Show();
        }


Jetzt öffnet sich der Internet Explorer nicht mehr, aber woher krieg ich denn die URL, zu der navigiert werden soll, damit ich die dem Konstruktor übergeben könnte?

Hoffe, dass sich damit jemand auskennt, MSDN spuckt auch nichts dazu aus *seufz*.

Vielen Dank im Voraus!

mfg C--
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

10.08.2009, 23:16

Du kannst dir den zuletzt ausgewählten Link merken, indem du an jeden Link einen Eventhandler anhängst:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
      WebBrowser browser = sender as WebBrowser;
      if ( browser == null )
        return;

      foreach (HtmlElement elem in browser.Document.Links)
      {
        elem.AttachEventHandler("onclick",
          new EventHandler(delegate(object sender1, EventArgs args) { mCurrentURL = browser.Document.ActiveElement.GetAttribute("href"); }));
      }
    }


In NewWindow kannst du dann einfach mCurrentURL als Ziel angeben.

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

3

10.08.2009, 23:35

Vielen Dank David_pb, auf die Idee wäre ich gar nicht gekommen.
Jetzt kann ich mit dem eigentlichen Programm weiter machen.

btw: wusste gsr nicht, dass man mit delegate auch direkt Methoden definieren kann.

**freu, freu**

mfg C--
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

11.08.2009, 08:33

Zitat von »"C--"«


btw: wusste gsr nicht, dass man mit delegate auch direkt Methoden definieren kann.


Ja, das nennt sich anonymes Delegate.

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

5

14.08.2009, 10:18

@David_pb: Ich hab mal n Fehler in der definition dem anonymen delegate gehabt, und der Compiler nennts glaub ich anonyme Methode :roll:
Ich will nicht klugscheißen...
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

14.08.2009, 10:48

Zitat von »"C--"«

@David_pb: Ich hab mal n Fehler in der definition dem anonymen delegate gehabt, und der Compiler nennts glaub ich anonyme Methode :roll:
Ich will nicht klugscheißen...


Es existieren beide Begrifflichkeiten.

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

7

14.08.2009, 10:56

Ok

Ps: kleine Frage, mir scheint das so, als ob der Webbrowser über den Internet Explorer arbeit.. gleiches Kontextmenü...
Funktioniert das auch, wenn der Internet Explorer nicht installiert ist?
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

14.08.2009, 13:39

Zitat von »"C--"«


Funktioniert das auch, wenn der Internet Explorer nicht installiert ist?


Nein, wohl eher nicht.

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

9

14.08.2009, 17:35

Schade...
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Das Gurke

Community-Fossil

Beiträge: 1 999

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

10

14.08.2009, 18:28

Ob das Kontextmenü dann noch funktioniert kann ich dir nicht genau sagen, das Rendering ansich aber auf jeden Fall. Unter Windows setzen so viele Programme auf die Trident Rendering Engine auf, dass Microsoft klargemacht hat diese auf dem System zu belassen, sogar wenn der IE garnicht erst installiert oder eben deinstalliert wird.

Die Frage ist also, ob das Kontextmenü ein Teil des IE oder ein Teil von Trident ist. Das kann ich dir aber leider nicht beantworten.

Werbeanzeige