Změna velikosti formu   otázka

VB.NET

Dobrý den, potřeboval bych poradit.

Potřebuji vyvolat nějakou činnost v závislosti na změně velikosti formu, ale ani jedna z možností, které jsem zkoušel, mi nevyhovuje.

Potřebuji, aby se kód spustil až po dokončení změny velikosti okno, tedy i při maximalizaci, nikoliv však při minimalizaci.

Zkoušel jsem Form_Resize - zde se vyvolává příslušná procedura neustále

ResizeEnd - zde je to OK (nefunguje pouze při maximalizaci) nevýhoda je, že reaguje i na změnu polohy okna

SizeChanged - to samé jako resize

Prosím poraďte.

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Můžete přece použít:

Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        If Me.WindowState = FormWindowState.Maximized Then
            'akce po maximalizování
        End If
    End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

nebo

  Private Sub Form1_SizeChanged(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles Me.SizeChanged
    If Me.WindowState = FormWindowState.Minimized Then Exit Sub
    ' kód, který chci provést...
    MsgBox("SizeChanged")
  End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Maximalizace a minimalizace neni muj problem, tam je nekolik cest k reseni. Problem je v tom, ze jak SizeCHanged tak Resize vyvolava udalost porad... tedy, kdyz zvetsuji okno tahem mysi, a ve vyvolanem kodu bude messagebox, tak je to spatne, protoze message box bude vyskakovat neustale.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já jsem měl kdysi stejný problém - vzhledem k tomu, že událost Resize/SizeChanged se vyvolává při každé změně, tudíž mnohokrát za vteřinu během změny velikosti okna se toto naprosto nehodí k věcem, které jsou poměrně náročné (například vykreslování něčeho), navíc je nežádoucí, aby se kód provedl během pouhého přesunutí okna.

Dá se to vyřešit například takto:

Public Class Form1
  Private _originalSize As Size
  Private Sub Form1_ResizeBegin(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeBegin
    'Před začátkem změn velikosti uložit velikost
    _originalSize = Me.Size
  End Sub
  Private Sub Form1_ResizeEnd(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeEnd
    'Provést kód pouze pokud se velikost změnila
    '(neprovede se při pouhém přesunutí okna).
    If Me.Size.Equals(_originalSize) Then Return
    MsgBox("Došlo ke změně velikosti.")
  End Sub
End Class

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

No pak tedy takhle:

Private _minimalized As Boolean
Private _maximalized As Boolean
Private _formSize As Size = Me.Size
   
Private Sub zmenaVelikosti(ByVal sender As Object, ByVal e As System.EventArgs)
    'kod
End Sub

Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        'Je minimalizováno
        Me._minimalized = True
    ElseIf Me.WindowState = FormWindowState.Maximized Then
        'Je maximalizováno
        Me._maximalized = True
        ZmenaVelikosti(sender, e)
        Exit Sub
    ElseIf Me.WindowState = FormWindowState.Normal Then
        'Stisk normal
        If Me._maximalized Then
            'z maximalizace
            Me._maximalized = False
            ZmenaVelikosti(sender, e)
            Exit Sub
        ElseIf Me._minimalized Then
            'z minimalizace
            Me._minimalized = False
            Exit Sub
        End If
    End If
End Sub

Private Sub Form1_ResizeEnd(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeEnd
    'Zmena velikosti
    If Me.Size = Me._formSize Then Exit Sub
    Me._formSize = Me.Size
    zmenaVelikosti(sender, e)
End Sub
nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback