Falsches Label & Textbox bekommt Location zugewiesen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Falsches Label & Textbox bekommt Location zugewiesen

    Guten Morgen,

    unzwar Programmiere ich momentan unter .Net Compact Framework & der IDE Visual Studio 2005 Professional.
    Die Anwendung wird für ein Windows CE-Gerät programmiert.

    Ich habe folgendes vor:
    Wenn auf eine Textbox geklickt wird, wird diese Hochgesetzt (via Location), vergrößert und eine Tastatur geöffnet.
    Das klappt auch mehr oder weniger. Zumindest bei einigen Textboxen.

    Dieser Code setzt Label & Textbox hoch:

    VB.NET-Quellcode

    1. Private Sub Höhe1Textbox_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Höhe1Textbox.GotFocus
    2. AllesAusblenden()
    3. Höhe1Textbox.Visible = True
    4. Höhe1Textbox.Location = New System.Drawing.Point(326, 55)
    5. Höhe1Textbox.Size = New System.Drawing.Size(266, 40)
    6. Höhe1Textbox.Font = New System.Drawing.Font("Tahoma", 20, FontStyle.Regular)
    7. HöheLabel.Visible = True
    8. HöheLabel.Location = New System.Drawing.Point(121, 55)
    9. HöheLabel.Size = New System.Drawing.Size(200, 40)
    10. HöheLabel.Font = New System.Drawing.Font("Tahoma", 20, FontStyle.Regular)
    11. LastActiveTextbox =Höhe1Textbox
    12. End Sub


    und der Sub AllesAusblenden()

    VB.NET-Quellcode

    1. Private Sub AllesAusblenden()
    2. WerteLabel.Hide()
    3. ToleranzLabel.Hide()
    4. HöheLabel.Hide()
    5. Höhe1Textbox.Hide()
    6. Höhe2Textbox.Hide()
    7. FlüssigkeitstemperaturLabel.Hide()
    8. Ftemp1Textbox.Hide()
    9. Ftemp2Textbox.Hide()
    10. Label10.Hide()
    11. Label1.Hide()
    12. Label4.Hide()
    13. Input.Visible = True
    14. End Sub


    Ich habe auch .Visible = False probiert, führt aber auf das gleiche Ergebnis zurück (näheres unten)
    "Input" ist ein von uns erstelltes Steuerelement, aber das hat keine Probleme, wollte es nur mal erläutern.

    So, nach dem ich das Projekt so erstellt habe, und auf dem CE-Gerät ausführe, und auf die Textbox klicke, passiert folgendes:
    Es wird ein anderes Label (Flüssigkeitstemperatur) und eine andere Textbox hochgesetzt.
    Ich habe via FlüssigkeitstemperaturLabel.Visible = False bereits herausgefunden, das die FlüssigkeitstemperaturLabel & Textbox auf das HöhenLabel & Textbox gesetzt wird.
    Auch für Flüssigkeitslabel und die Textbox gibt es ein GotFocus-Event (genau das gleiche wie beim Höhenlabel).

    Das merkwürdige hierbei ist aber:
    Bei anderen Textboxen (auf dem gleichen Form, genau das gleiche GotFocus-Event) funktioniert es einwandfrei..

    Ich finde einfach nicht heraus, wieso außer dem Höhenlabel auch das Flüssigkeitslabel hochgesetzt wird.

    Lg,
    Neoner
    Sieh Dir mal alle Zugriffe auf Namen dieser beiden Controls an.
    Möglicherweise wird da etwas verkehrt zugewiesen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Sieh Dir mal alle Zugriffe auf Namen dieser beiden Controls an.
    Möglicherweise wird da etwas verkehrt zugewiesen.
    Ich habe bereits die Textboxen und die entsprechenden Label überprüft.
    Die Namen der jeweiligen Textboxen und Label sind völlig Korrekt, daher kann also kein Fehler stammen.

    RodFromGermany schrieb:

    Sieh Dir mal alle Zugriffe auf Namen dieser beiden Controls an.

    Neoner schrieb:

    Ich habe bereits die Textboxen und die entsprechenden Label überprüft.
    Verfolge die Zugriffe dieser Controls, z.B.

    VB.NET-Quellcode

    1. MyInternControl = This
    2. ' und
    3. MyInternControl = That
    4. DoAnything(MyInternControl)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neoner schrieb:

    Zumindest bei einigen Textboxen.

    Vermutlich hast du mehrere Eventhandler, die das hochsetzen veranlassen? Vermutlich hast du die per C&P erzeugt? Kann es sein, dass du die "Handles ..." Anweisung nicht angepasst hast?

    BESSER wäre es sowieso, das ganze "dynamisch" zu machen und nicht mit den Controlnamen direkt zu arbeiten. Außerdem sollte es nur EINEN Eventhandler geben, der das bewerkstelligt.

    picoflop schrieb:

    Neoner schrieb:

    Zumindest bei einigen Textboxen.

    Vermutlich hast du mehrere Eventhandler, die das hochsetzen veranlassen? Vermutlich hast du die per C&P erzeugt? Kann es sein, dass du die "Handles ..." Anweisung nicht angepasst hast?

    BESSER wäre es sowieso, das ganze "dynamisch" zu machen und nicht mit den Controlnamen direkt zu arbeiten. Außerdem sollte es nur EINEN Eventhandler geben, der das bewerkstelligt.
    Die Sub's und Eventhandler wurden jeweils automatisch generiert (doppelklick auf das GotFocus Event).
    Ich wüsste nicht, wie ich es Dynamisch machen sollte, daher habe ich das ganze auch so angefangen.

    RodFromGermany schrieb:

    RodFromGermany schrieb:

    Sieh Dir mal alle Zugriffe auf Namen dieser beiden Controls an.

    Neoner schrieb:

    Ich habe bereits die Textboxen und die entsprechenden Label überprüft.
    Verfolge die Zugriffe dieser Controls, z.B.

    VB.NET-Quellcode

    1. MyInternControl = This
    2. ' und
    3. MyInternControl = That
    4. DoAnything(MyInternControl)

    Ich habe es soeben mit einer MsgBox getestet.
    Beim Klicken (auslösen des GotFocus-Events) wird auch der Sub mit Flüssigkeitstemperatur angesprochen (mit dem jeweiligen GotFocus-Eventhandler).
    Aber es gibt rein nichts im Quellcode, das es iergendwie Fokusieren könnte, um das Event auszulösen.

    unter AllesAusblenden() habe ich alles was mit Flüssigkeitstemperatur zu tun hat bereits Ausgeblenden...

    Ich finde den fehler einfach nicht..

    Neoner schrieb:

    Beim Klicken (auslösen des GotFocus-Events) wird auch der Sub mit Flüssigkeitstemperatur angesprochen (mit dem jeweiligen GotFocus-Eventhandler).

    Wobei "GotFocus" sowieso unpraktisch ist, da es automatisch ausgelöst wird, wenn zb ein anderes control den Focus verliert ... weil es zb unsichtbar gemacht wird ...

    Schau dir deinen Code mal an: Im GotFocus machst du ALLES unsichtbar. In dem Moment, wo das control das den focus hat unsichtbar wird, dürfte das nächste Control den Focus erhalten. Das ruft dann wiederum ausblenden() auf ... und im Endeffekt hast du ein wildes Eventgefeuere das den "normalen" Ablauf nicht mehr wiederspiegelt.