Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Oma RTF-box

Hennkka [07.02.2011 20:44:10]

#

Olen tässä yrittänyt koodata omaa controllia, jonka pohjana RichTextBox. Nyt sitten on ongelmana, että miksei OnPaint- ja Refresh-metodien ylikirjoittaminen aiheuta mitään. Eli ei näy MsgBox:ia.

Public Class CodeBox
    Inherits Windows.Forms.RichTextBox
    Public Overrides Sub Refresh()
        MsgBox("a")
        MyBase.Refresh()
    End Sub
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        MsgBox("b")
        MyBase.OnPaint(e)
    End Sub
End Class

Edit. Ja tietenkin meni väärän aiheen alle-_-

Grez [07.02.2011 20:46:10]

#

No kutsutko sitten Refreshiä jossain ja käsitteletkö basen paint-eventin?

Hennkka [07.02.2011 20:48:43]

#

Eikös OnPaint:tia kutsuta automaattisesti, kun controlli pitää piirtää uudelleen? Ja Refresh vain toisena vaihtoehtona.

Grez [07.02.2011 20:58:04]

#

Joo, ajattelin jotain muuta eventtien suhteen.

Mutta:

Rich Text Box (ja muutamat muut windowsin peruskalikat) on sellaisia, että järjestelmä piirtää ne, ei .Net. Ja koska kaikki piirtäminen tehdään frameworkin ulkopuolella, niin Paint-eventiä ei koskaan tule.

Eihän VB.Net edes anna määritellä RTF:lle Paint-eventiä.

Hennkka [07.02.2011 21:02:16]

#

Milläköhän kannattaisi toteuttaa, kun tarkoitus olisi värittää tekstiä aina kun se muuttuu? OnTextChanged ei suoraan käy, koska jos siinä muuttaa tekstiä, se heti kutsuu taas itseään ja päätyy loputtomaan looppiin.

Grez kirjoitti:

Eihän VB.Net edes anna määritellä RTF:lle Paint-eventiä.

En ole kokeillut, mutta tuo OnPaint löytyi ihan automaattitäydennyksestä ja kääntyy.

Grez [07.02.2011 21:04:32]

#

No jos haluat paintin hoitaa niin seuraavalla onnistuu. (Laitoin debug.print msgboxin asemesta, koska msgboxilla ollaan ikuisessa loopissa)

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    Const WM_PAINT As Integer = &HF
    Select Case m.Msg
        Case WM_PAINT
            Debug.Print("b")
    End Select
    MyBase.WndProc(m)
End Sub

lainaus:

En ole kokeillut, mutta tuo OnPaint löytyi ihan automaattitäydennyksestä ja kääntyy.

En epäile etteikö kääntyisi. Minusta olennaisempi kysymys on kuitenkin: Toimiiko se?

Taitaa olla sellainen mikä periytyy Control -luokalta, joten ei sitä kai voi poiskaan ottaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta