Nicht modale UserForm wandert bei Größenänderung über Textbox

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von SoEinVBler.

    Nicht modale UserForm wandert bei Größenänderung über Textbox

    Hallo,

    ich habe aktuell ein seltsames Verhalten in Excel, was ich nicht nachvollziehen kann.

    In meiner UserForm ist eine Textbox über die ich die Höhe der Userform angeben kann.
    Diese Userform wird nicht modal anzeigt und ich schiebe sie teilweise auf dem 2. Bildschirm rechts.
    Wenn nun in der Textbox eine neue Höhe der Userform eingestellt wird, wandert die Userform, beim Verkleinern der Höhe, etwas nach oben und die Breite wird etwas schmäler.
    Das ganze Verhalten geschiet so lange bis sich das Fenster komplett auf dem 1. Bildschirm befindet.

    Das ganze hängt auch mit der Textbox zusammen, wenn ich die Höhe z.B. über das Click-Ereignis der UserForm verändere passiert dies nicht.

    Kennt jemand das Problem oder hat dafür eine Erklärung?

    Es handelt sich um Office 365 Version 2202...

    Der Aufruf der Userform geschiet so:

    Visual Basic-Quellcode

    1. Dim f as New userForm1
    2. f.Show False


    Der Code in der Userform ist:

    Visual Basic-Quellcode

    1. Private Sub UserForm_Click()
    2. Me.Height = Val(TextBox1.Text)
    3. End Sub


    Edit 02.07.23: habe die Beschreibung des Fehlers noch etwas angepasst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SoEinVBler“ ()

    links, Bildschrim 1920x1080 Skalierung 100%
    rechts, Laptop-Bidschirm 1902x1080 Skalierung 125%

    Und ich habe es gerade getestet, wenn ich rechts die Skalierung auf 100% stelle gibt es das Problem nicht.(nur kann ich dann rechts nichts mehr so gut lesen)
    Hängt also mit der Skalierung zusammen.

    Was mich aber wundert warum es auch mit der Textbox zusammenhängt.
    Vor allem tritt das Problem nur auf wenn ich in der Textbox Zeichen lösche.
    Habe den Code mal so geändert.

    Visual Basic-Quellcode

    1. Private Sub TextBox1_Change()
    2. Me.Height = Me.Height -1
    3. End Sub


    Die Form wird wieder nach dem Start etwas auf den rechten Bildschirm geschoben.
    So lange ich irgendwas in die Textbox schreibe wird die Form bei jeder Änderung um 1 kleiner, passt.

    Wenn ich nun aber Text aus der Textbox lösche, wird die Form in der Höhe größer, in der Breite kleiner, und wandert nach oben.
    Es verhält sich sogar so, dass der untere Rand quasi stehen bleibt, bzw. um den einen Punkt/Pixel nach oben wandert, der obere Rand (Top) aber um ca. 100 bis 20 nach oben wandert, das variiert stark.

    Der gleiche Code im Form_Click Event macht was er soll.

    Wenn ich die Form komplett auf den rechten Bildschirm schiebe verhält es sich ähnlich, da wird das Fenster nur schneller kleiner.
    Ich verstehe nicht was Du willst?

    Mit Deinen Code

    Quellcode

    1. ​Me.Height
    änderst Du doch genau die Größe des Formulars.

    Wenn sich die Breite und Position ändert, scheint es noch irgendwo anderen Code zu geben, der das Verhalten beeinflusst.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    wie schon beschrieben ist es ein, für mich, unerklärliches Verhalten.
    Es hängt mit der Skalierung der Bildschirme zusammen, tritt aber nur in Verbindung mit einer Textbox auf.

    Auf der Userform ist nur die eine Textbox und
    in der Arbeitsmappe gibt es nur diesen Code:

    in einem Modul

    Visual Basic-Quellcode

    1. Sub startForm()
    2. Dim f as New userForm1
    3. f.Show False
    4. End Sub

    und in der Form

    Visual Basic-Quellcode

    1. Private Sub TextBox1_Change()
    2. Me.Height = Me.Height -1
    3. End Sub
    4. Private Sub UserForm_Click()
    5. Me.Height = Me.Height -1
    6. End Sub


    Wenn die Form ganz oder teilweise auf einem Bildschirm ist, auf dem die Skalierung z.B. auf 125% steht, und in der Textbox Zeichen gelöscht werden, tritt bei mir das Verhalten auf.
    So lange Text eingegeben wird oder auf die Form mit der Maus geklickt wird, ist alles normal.

    Wie schon beschrieben, wenn es sich falsch verhält wandert die Form nach oben und die Höhe vergrößert sich.
    Zum Testen habe ich mal die Werte für .Top, .Left, .Height und .Width im Degugfenster ausgeben lassen.
    Die ersten beiden Zeilen zeigen wenn Text in der Textbox eingegeben wird, und man sieht es ändert sich, wie es sein sollte, nur die Höhe um 1.
    Bei der 3. und 4. Zeile wurden dann Zeichen entfernt, und schon springt die Form nach oben, die Breite wird schmäler, und die Höhe vergrößert sich sogar.

    Top:
    392,25
    Left:
    729
    Height:
    199,25
    Width:
    800,25
    Top:
    392,25
    Left:
    729
    Height:
    198,25
    Width:
    800,25
    Top:
    313,5
    Left:
    729
    Height:
    276
    Width:
    782,25
    Top:
    250,5
    Left:
    729
    Height:
    338,25
    Width:
    768