Logo v MDI formuláři   zodpovězená otázka

VB.NET

Je prosím možné nějak jednoduše na MDI formulář umístit obrázek do pravého dolního rohu tak, aby tam byl ukotven při změně velikosti formuláře a zároveň nepřekrýval dětská okna (byl na pozadí)?

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

Kreslete ho ručně v události Paint. Jakýkoliv ovládací prvek (PictureBox) v MDI kontejneru překryje podřízená MDI okna, má to svůj význam.

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

Děkuji, přesně toto nasměrování jsem potřeboval.

Výsledek:

Public Sub New()

        ' Toto volání je vyžadováno návrhářem.
        InitializeComponent()

        ' Přidat libovolnou inicializaci po volání InitializeComponent().

        For Each ctl As Control In Me.Controls
            ctl = TryCast(ctl, Windows.Forms.MdiClient)
            If Not ctl Is Nothing Then
                AddHandler ctl.Paint, AddressOf Mdi_Paint
                AddHandler ctl.SizeChanged, AddressOf Mdi_SizeChanged
                Exit For
            End If
        Next
End Sub

Private Sub Mdi_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim obrazek As Bitmap = My.Resources.Logo
        e.Graphics.DrawImage(obrazek, Me.ClientSize.Width - obrazek.Width + 10, Me.ClientSize.Height - obrazek.Height - 30)
End Sub

Private Sub Mdi_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        CType(sender, MdiClient).Invalidate()
End Sub
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Proč je tam ten kód při SizeChanged? Paint by se mělo volat automaticky vždy při potřebě překreslení, tedy i po změně velikosti okna.

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

Protože při změně velikosti okna to sice nakreslí nový obrázek správně, ale nesmaže ten původní (nepřekreslí se celá plocha).

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

V tom případě tu invalidaci volejte v události ResizeEnd a ne SizeChanged, to se provede až po dokončení zvětšování okna, ne v celém průběhu tažení okna. Bude to mnohem míň náročnější.

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

ResizeEnd má jenom MDIParentGlobal a ne MdiClient. U MDIParentGlobal se to už nechová správně. Takto to bude stačit (velikost se nemění pořád a tak náročnost neřeším).

nahlásit spamnahlásit spam 1 / 1 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