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-_-
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 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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.