Textbox1.text Fehler?

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Dogukan.

    Textbox1.text Fehler?

    Guten Abend!

    Ich habe ein Problem mit folgendem Code:

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById(Textbox2.text).InnerText = TextBox1.Text

    Da meine ID in einer Textbox steht, welches ich nicht kenne (nicht statisch), wollte ich, dass er dies aus der Textbox herausnimmt. So funktioniert der Code aber leider nicht!
    Ich habe auch anders probiert, nämlich:

    VB.NET-Quellcode

    1. Dim id as String = Textbox2.Text
    folglich:

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById(id).InnerText = TextBox1.Text

    Funktioniert aber auch nicht! :(

    Bitte um Hilfe!
    Danke

    Liebe Grüße
    Stepp das Ganze im Debugger mal durch und kontrolliere die Werte welche Textbox2.Text bzw. id besitzen.
    Versuche dann die ID zu Testzwecken fix einzutragen um rauszufinden wo das Problem genau liegt.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ein Anfang wäre schonmal, wenn du uns den Fehler zeigst. Im Moment hab ich keine Ahnung welche Fehlermeldung gemeint ist. Wird dir ein Fehler während der Laufzeit oder von IntelliSense angezeigt? Bei ersterem bitte die Exception mit Stacktrace posten.

    LG :)
    @ChOoSeMyNaMe Der Fehler wird während der Laufzeit angezeigt, bzw. wenn ich eben den Button betätige.
    Siehe Fehler: :)

    StackTrace - Fehler

    Quellcode

    1. System.NullReferenceException was unhandled
    2. HResult=-2147467261
    3. Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    4. Source=GetElements
    5. StackTrace:
    6. bei GetElements_Test.Form1.Button1_Click(Object sender, EventArgs e) in C:\Users\xxx\Documents\Visual Studio 2010\Projects\GetElements\GetElements\Form1.vb:Zeile 62.
    7. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    8. bei System.Windows.Forms.Button.OnClick(EventArgs e)
    9. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    10. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    11. bei System.Windows.Forms.Control.WndProc(Message& m)
    12. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    13. bei System.Windows.Forms.Button.WndProc(Message& m)
    14. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    15. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    16. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    17. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    18. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    19. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    20. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    21. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    22. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    23. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    24. bei GetElements_Test.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    25. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    26. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    27. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    28. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    29. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    30. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    31. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    32. bei System.Threading.ThreadHelper.ThreadStart()
    33. InnerException:

    Bzw zusammengefasst:

    Quellcode

    1. NullReferenceException was unhandled
    2. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Komischerweise, hat die Variable einen Wert -> Das sehe ich ja visuell; -> Label
    Der Code

    VB.NET-Quellcode

    1. Try
    2. Dim theElementCollection As HtmlElementCollection
    3. theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
    4. For Each curElement As HtmlElement In theElementCollection
    5. If curElement.GetAttribute("OuterHtml").Contains("<input name=""q") AndAlso curElement.GetAttribute("OuterHtml").Contains("value=") Then
    6. TextBox1.Text = curElement.GetAttribute("OuterHtml").ToString
    7. End If
    8. Next
    9. Dim mCollect As MatchCollection = Regex.Matches(TextBox1.Text.ToString, "(?<=<input name=).*?(?=value=)", RegexOptions.IgnoreCase)
    10. For Each m As Match In mCollect
    11. Label1.Text = m.Value
    12. Label1.Text = Microsoft.VisualBasic.Left(Label1.Text, 9)
    13. Next
    14. Catch exc As Exception
    15. End Try
    16. Label2.Text = Label1.Text + "answer"""
    17. WebBrowser1.Document.GetElementById(Label2.Text).InnerText = TextBox2.Text
    Ach jetzt weiß ich wo der Fehler liegt, bin heut auch etwas neben der Spur.
    Dein Fehler ist, dass du den Code aufrufst, bevor der Browser die Seit fertig geladen hat. Das Document wird immer auf Nothing gesetzt, wenn der Browser irgendwo hin navigiert sprich du greifst auf nichts zu. Das zu beheben ist sogar ziemlich einfach, du musst einfach nur die Events vom Browser nutzen.
    Bspw so:

    VB.NET-Quellcode

    1. ​Dim finished As Boolean = False
    2. Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    3. finished = True
    4. End Sub
    5. Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    6. finished = False
    7. End Sub

    Im Button musst du einfach vorher prüfen ob er fertig ist bspw so:

    VB.NET-Quellcode

    1. ​Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If Not fin Then Return
    3. 'restlicher Code
    4. End Sub

    So wird der Code erst ausgeführt wenn der Browser fertig ist.

    LG
    Zuerstmal vielen Dank, dass du mir weiterhelfen willst :)
    Leider muss ich sagen, dass es immernoch nicht funktioniert. Denn laut deiner Theorie dürfte dann die fixe ID auch nicht klappen.
    Hier der Fehler-Code mit deinem Quellcode integriert:
    StackTrace - Fehler

    Quellcode

    1. System.NullReferenceException was unhandled
    2. HResult=-2147467261
    3. Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    4. Source=GetElements
    5. StackTrace:
    6. bei GetElements_Test.Form1.Button1_Click(Object sender, EventArgs e) in C:\Users\Dogukan\Documents\Visual Studio 2010\Projects\GetElements\GetElements\Form1.vb:Zeile 64.
    7. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    8. bei System.Windows.Forms.Button.OnClick(EventArgs e)
    9. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    10. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    11. bei System.Windows.Forms.Control.WndProc(Message& m)
    12. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    13. bei System.Windows.Forms.Button.WndProc(Message& m)
    14. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    15. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    16. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    17. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    18. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    19. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    20. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    21. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    22. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    23. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    24. bei GetElements_Test.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    25. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    26. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    27. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    28. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    29. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    30. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    31. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    32. bei System.Threading.ThreadHelper.ThreadStart()
    33. InnerException:
    Ich hab's endlich geschafft! Endlich hat es geklappt. Es geht an und für sich auch ohne deinem Code mit 'finished', aber den lasse ich mal trotzdem drinnen ;)
    Der Fehler war der, dass die ID in der Textbox so "ID" angegeben wird, und wenn ich in diesem Code:

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById(Textbox1.Text).InnerText = TextBox2.Text

    die Textbox1.Text angebe, dann fügt er automatisch "" (Anführungszeichen) hinzu. Das heißt: Schlussendlich ist die ID mit doppelten Anführungszeichen angegeben -> ""ID"". Ergo gibt es logischerweise keine solche ID, weshalb eben keine Objektinstanz definiert worden ist!! :) Also habe ich einen Code geschrieben, der die "" aus der Textbox löscht und somit alles funktioniert!
    Dennoch, DANKE für die Mühe!


    LG