Autor Beitrag
cucu
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 30.04.07 12:11 
Hallo,

Ich programmiere .Net in C#. Ich habe ein Problem wenn ich von dem Webbrowser Steuerelement den string OuterHtml verändern möchte. Auf der MSDN Seite wird was beschrieben was passiert wenn man OuterHmtl verändert aber ich weiß nicht was die mir damit sagen wollen und wie ich das umgehe.
Der Code sieht so aus: HtmlElement.Outerhtml.Replace("bla bla"," "); Was leider nicht funktioniert.
Wie bekomme ich OuterHtml verändert ???

mfg cucu
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 30.04.07 17:38 
.Net-Strings sind immutable. Immer. Ausnahmslos ;) . Wenn du dir Replace ein wenig genauer anschaust, sollte dir der Rückgabewert auffallen. Da Replace den Input-String eben nicht verändern kann, wird das Resultat... nunja, als Result zurückgegeben :zwinker: .
cucu Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 05.05.07 19:49 
Danke für die Antwort. Ich versuche es jetzt mit HtmlElement.Outerhtml = HtmlElement.Outerhtml.remove(); ich bekomme diesen string einfach nicht verändert. Welche Möglichkeiten gibt es denn??? Wie kann ich denn den string verändern?

mfg cucu
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 06.05.07 12:39 
Kann es sein, dass dir die absoluten Grundlagen von C# fehlen? Dann solltest du dir diese auf jeden Fall aneignen, bevor du schwerere Projekte in Angriff nimmst.
Bei deinem Codeschnippsel fällt mir jedenfalls auf, dass du Remove nicht die benötigten Argumente übergibst - vielleicht solltest du einfach einmal beschreiben, was du genau vorhast - und entweder hast du wirklich eine Variable/Property namens HtmlElement oder du versuchst gerade, auf die Klasseneigenschaften zuzugreifen, was auf keinen Fall funktionieren wird.
Hier einmal ein Minimalbeispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public Form1()
{
  InitializeComponent();

  browser.DocumentText = @"<html><body><span>bla</span></body></html>";
}

private void button_Click(object sender, EventArgs e)
{
  browser.Document.Body.Children[0].OuterHtml = @"<a href='http://www.goggle.com'>blubb</a>";
}
cucu Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 06.05.07 20:43 
Hi,

Es tut mir leid habe den Post nur hingeschmiert, ich erläutere mein Problem genauer. Ich habe ein Programm geschrieben was sich auf einer Internetseite zurecht findet und mit dieser umgehen kann. Doch ich habe ein Problem mit einem Fenster was sich öffnet in dem ich OK und Abbrechen klicken muss. Ich möchte aber gerne diese Fenster irgendwie Eliminieren. Dann kam mir die Idee das ich den Quellcode einfach nach meinen Wünschen verändern kann sodass dieses Fenster nicht aufpopt.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
                            HtmlElement Form = null;
                            HtmlElement TempForm = null;
                            ElementColl = webBrowser1.Document.GetElementsByTagName("Form");

                            for (int i = 0; i < ElementColl.Count; i += 1)
                            {
                                TempForm = ElementColl[i];
                                if (TempForm.OuterHtml != null)
                                    if (TempForm.OuterHtml.Contains("return ask"))
                                    {
                                        i = ElementColl.Count + 100// i so hoch setzen sodass die schleife beendet wird
                                        Form = TempForm; // Übergeben
                                    }

                            }

Wenn ich dann das HtmlElement habe in dem das Fenster ausgeführt wird wollte ich dieses so verändern das kein Fenster mehr aufpopt.
ausblenden C#-Quelltext
1:
2:
3:
                                Index1 = Form.OuterHtml.IndexOf("return ask");
                                if (Index1 != -1)
                                    Form.OuterHtml = Form.OuterHtml.Remove(Index1, 10); // Lösche return ask

Dachte mir damit könnte ich das Fenster Eliminieren. Doch wenn ich mir nach dem befehl Remove, OuterHtml anschaue dann fällt fast alles weg von OuterHtml ausser das return ask was ich weg haben möchte. Nach MSDN.com kann ich OuterHtml setzen, deshalb dachte ich sollte das kein Problem darstellen.
Kann sein das mir die Grundlagen für C# fehlen habe aber ein paar Grundlagen von anderen sprachen und kein Geld mir für jedes Hobby Projekt ein 30€ - 50€ teures Buch zu kaufen. Deswegen kann das schon so rüber kommen, aber bis jetzt konnte ich mich so durchschlagen.

mfg cucu
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 09.05.07 16:37 
user profile iconcucu hat folgendes geschrieben:
ausblenden C#-Quelltext
1:
                                        i = ElementColl.Count + 100// i so hoch setzen sodass die schleife beendet wird					

Kreativ bist du, das muss man dir lassen :zwinker: . break
user profile iconcucu hat folgendes geschrieben:
ausblenden C#-Quelltext
1:
Form.OuterHtml = Form.OuterHtml.Remove(Index1, 10); // Lösche return ask					
Zu dieser Zeile kann ich so gut wie überhaupt nichts sagen, da ich weder weiß, wie OuterHtml vor Remove aussieht, noch wie danach. Um einen Fehler zu finden, bräuchte ich den genauen Input und Output - grundsätzlich sieht die Zeile aber richtig aus.
cucu Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 10.05.07 11:54 
Titel: Lösung
Ja kreativ bin ich ^^. Aber es sieht nicht so schön aus. Habe es dann mal durch break; ersetzt :).

Ich habe das Problem gelöst. Ich danke dir für deine Hilfe.
Ich wollte dieses return ask aus dem Quelltext raus bekommen. Das return ask stand in <Form onsubmit = return ask(bla bla) action = ........> da ich das return ask nicht Manuel aus dem Text löschen konnte habe ich mir nun überlegt einen anderen weg zu gehen. Habe dann HtmlElement.DomElement.onsubmit mit null besetzt. So hat sich return ask Automatisch gelöscht.
ausblenden C#-Quelltext
1:
((mshtml.HTMLFormElementClass)Form.DomElement).onsubmit = ((mshtml.HTMLFormElementClass)Form.DomElement).onmousemove;					


Da onsubmit ein System.__ComObject ist habe ich es einfach gleich mit einem System.DBNull Object gesetzt.


mfg cucu