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 ClassEdit. Ja tietenkin meni väärän aiheen alle-_-
No kutsutko sitten Refreshiä jossain ja käsitteletkö basen paint-eventin?
Eikös OnPaint:tia kutsuta automaattisesti, kun controlli pitää piirtää uudelleen? Ja Refresh vain toisena vaihtoehtona.
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ä.
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.
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 Sublainaus:
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.