invalid operation exception beim Aufrufen von Form2

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    invalid operation exception beim Aufrufen von Form2

    Hey,

    Ich bekomm bei folgendem Code:

    VB.NET-Quellcode

    1. browser.Show()
    2. browser.WebBrowser1.Navigate(TextBox1.Text)

    eine:
    "invalid operation exception" .

    Vorhin hat es noch genauso funktioniert, ich frage mich wieso jetzt nichtmehr..

    MfG
    @Coke*:
    So alleine wird's schwierig, herauszufinden, warum das nicht funktioniert. Das ist, als würdest Du einem Mechaniker sagen, Dein Auto fährt nicht richtig, wenn Du das Gaspedal drückst.

    Allerdings fällt mir da was auf:
    Ist browser ganz zufällig eine Form-Klasse? (Also der Name der Form?)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:


    Ist browser ganz zufällig eine Form-Klasse? (Also der Name der Form?)

    Ganz genau.

    Hier ist mein gesamtes Auto:

    VB.NET-Quellcode

    1. Public Class Form2 'altes Browser
    2. Dim htmlText As String = WebBrowser1.Document.Body.InnerHtml
    3. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    4. RichTextBox1.Text = htmlText
    5. End Sub
    6. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    7. IO.File.Create("C:\Users\Tagesarbeit\Desktop\VB MF WARENKORB TEST\htmlcode.txt")
    8. My.Computer.FileSystem.WriteAllText("C:\Users\Tagesarbeit\Desktop\VB MF WARENKORB TEST\htmlcode.txt", htmlText, False)
    9. End Sub
    10. End Class



    Wenn ich debuggen will kommt die exception..
    @Coke*:
    Das ist böse, was Du da machst ;)

    Denk mal nach. Form2 ist eine Klasse. Und Du versuchst, die Klasse anzuzeigen. Eine Klasse kann aber nicht angezeigt werden. Nur Instanzen von Klassen können angezeigt werden.
    Ich mag da die Analogie mit Autos: Ein VW-Golf 4 ist ein Bauplan. Mit dem Bauplan kannst Du nicht fahren. Mit Autos, die nach dem Bauplan gebaut wurden (sprich: Instanzen des Bauplans), kannst Du das aber machen.

    Also anders ausgedrückt:

    VB.NET-Quellcode

    1. 'Was Du versuchst:
    2. Form2.Show()
    3. VWGolf4.Drive()
    4. 'Wie's gemacht werden muss:
    5. Dim Dlg As New Form2
    6. Dlg.Show()
    7. Dim Car As New VWGolf4
    8. Car.Drive()


    Das Funktioniert auf die Falsche Art nur, weil der VB-Compiler (weil er die Abwärtskompatibilität zu VB6 erhalten will) in Wirklichkeit nicht Form2.Show() kompiliert, sondern Application.OpenForms("Form2").Show(). Und das funktioniert nur solange es nur eine einzige Instanz von Form2 gibt und solange man nicht mit Threading anfängt.

    Auf Deine Situation zugeschnitten müsste es in etwa so aussehen:

    VB.NET-Quellcode

    1. Class Form1
    2. Dim BrowserForm As Form2 'beachte, dass hier noch keine Instanz erstellt wird.
    3. Sub DieMethodeInDerDerCodeAusDemStartPostSteht()
    4. If BrowserForm Is Nothing OrElse BrowserForm.IsDisposed Then
    5. BrowserForm = New Form2
    6. End If
    7. BrowserForm.Show()
    8. BrowserForm.Browser.Navigate(TextBox_TargetURL.Text) 'Gib den Controls sinnvolle Namen. TextBox2309472302034703242 ist kein sinnvoller Name ;)
    9. End Sub
    10. End Class
    11. Class Form2
    12. 'Code...
    13. End Class

    Auch nochmal angemerkt. Gib allen Elementen deines Programmes sinnvolle Namen. Dann wird's leichter für Dich, weil Du Dir nicht merken musst, wofür Du jetzt nochmal TextBox2309472302034703242 auf der Form hast. Du willst nicht enden wie LukaSoftware ;) Was die Welt wirklich nicht braucht (Fun-Links, usw.)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils