Události-Začátečník   zodpovězená otázka

VB.NET, WinForms

Dobrý den.

Potřeboval bych poradit:

Na Form sem vložil PictureBox u něj sem ošetřil událost pictureBox_Click.

Pak sem přes PictureBox vložil Label.

Potřeboval bych aby label byl vykreslen nad pictureBoxem ale na klik myší by reagoval pictureBox.

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

Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown, Label1.MouseDown

'Operace

Label1.Focus()

End Sub

??

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

Potřeboval bych aby label byl vykreslen nad pictureBoxem ale na klik myší by reagoval pictureBox.

Proč? Asi se po klikntutí na Label má stát totéž co po kliknutí na PictureBox. Jestli ano, dejte "co se má stát" do subrutiny a volejte ji jak z kliku na PictureBox, tak z kliku na Label.

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

Jo to mě napadlo jenže ta aplikace je pro PocketPC. A pro tuto platformu label prostě Click ani nic podobného nemá.

Ref:

http://msdn.microsoft.com/en-us/library/...

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

Pokud v tom PictureBoxu bude někdy obrázek tak pravděpodobně dospějete k názoru, že to je naprosto nepoužitelné řešení, protože pozadí Labelu nelze nastavit na průhledné... Takže bych doporučoval klepnutí ošetřovat PictureBoxem a text vykreslovat do PictureBoxu v události Paint.

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

A jak se to dělá? Neprůhledné pozadí labelu mi v tomto případě nevadí.

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

To, co Vám radil pan Linhart (psaní přímo do pictuteboxu) se udělá třeba takhle:

''' <summary>
    ''' Metoda, která je volaná (systémem) vždy, kdy je potřeba pictureBox1 překreslit
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        ' nastavíme třídu Graphics, na kterou budeme kreslit
        Dim grafika As Graphics = e.Graphics
        ' text pro vypsání
        Dim text As String = "Text do obrázku"
        ' font, kterým budeme kreslit (název rodiny fontů Arial,
        ' velikost 30, font bude tučný a současně kurzivní
        Dim fnt As New Font("Arial", 30, FontStyle.Bold Or FontStyle.Italic)
        ' určíme polohu kam budeme na pictureBox malovat
        ' text dáme přesně doprostřed pictureboxu
        ' (koordináty vypočteme jako polovinu šířky/výšky pictureboxu,
        ' od kterých odečteme polovinu šířky/výšky textového řetězce)
        Dim poloha As New Point((e.ClipRectangle.Width - grafika.MeasureString(text, fnt).Width) / 2, _
                                (e.ClipRectangle.Height - grafika.MeasureString(text, fnt).Height) / 2)


        ' text vykreslíme
        grafika.DrawString(text, fnt, Brushes.Blue, poloha)

    End Sub

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

Ještě drobnost:

v kódu si, prosím, opravte ten předposlední řádek. Místo

Dim poloha As New Point((e.ClipRectangle.Width - grafika.MeasureString(text, fnt).Width) / 2, _
                                (e.ClipRectangle.Height - grafika.MeasureString(text, fnt).Height) / 2)

tam dejte

Dim poloha As New Point((sender.Width - grafika.MeasureString(text, fnt).Width) / 2, _
                                (sender.Height - grafika.MeasureString(text, fnt).Height) / 2)

V tom prvním případě se to totiž chová ne zcela regulerně:

Pozicuje to totiž ne vůči celému PictureBoxu, ale vůči jeho "Clip" oblasti (nějaká jeho vyříznutá část pro zobrazení). No a pokud PictureBox překryjete nějakým jiným objektem (oknem) částečně a pak jej zase odkryjete, tak to pro překreslení bere pouze Clip (část) pictureboxu a pozicování textu se rozhodí.

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

Děkuji.

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