Страница: 1 |
Страница: 1 |
Вопрос: Почему не срабатывает Paint?
Добавлено: 29.03.07 12:25
Автор вопроса: Vugar Miriyev | Web-сайт:
Поытка сделать свой контрол кнопку на основе контрола панель. Столкнулся с проблемой при прорисовке. Проблема в том, что событие Paint срабатывает в случае отлова на
MyBase.MouseDown, но не срабатывает в случае отлова MyBase.MouseMove.
Sub DrawCaption(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim txt As String = Me.CaptionText
Dim graphics_path As New GraphicsPath
Dim rect As New RectangleF(10, 10, Me.Width - 20, Me.Height - 20)
Dim drawFont As New Font("Arial", Me.CaptionFontSize)
Dim drawBrush As New SolidBrush(Me.CaptionColor)
E.Graphics.DrawString(txt, drawFont, drawBrush, rect)
End Sub
Private Sub XB_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
Dim ClsClip1 As New Clipping
Dim imagename As String
Dim bmpsource As Bitmap
bmpsource = Me.MousDownImage
If Not (bmpsource Is Nothing) Then
ClsClip1.ScanBitmap(bmpsource, True)
ClsClip1.ApplyScannedBitmap(Me.BackgroundImage)
ClsClip1.ApplyScannedBitmapRegion(Me.Region)
End If
mousePressed = True
End Sub
Private Sub XB_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
Dim ClsClip1 As New Clipping
Dim imagename As String
Dim bmpsource As Bitmap
If mousePressed = False Then
Me.ButtonImage = Me.MousNormalImage
bmpsource = Me.OverButtonImage
If Not (bmpsource Is Nothing) Then
ClsClip1.ScanBitmap(bmpsource, True)
ClsClip1.ApplyScannedBitmap(Me.BackgroundImage)
ClsClip1.ApplyScannedBitmapRegion(Me.Region)
End If
End If
End Sub
Private Sub XtraButton_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
If mousePressed = False Then
CreateRegion()
End If
DrawCaption(e)
End Sub
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 29.03.07 14:45
По сути, когда мышь просто двигается по контролу, не должно быть события PAINT, ибо перекрашивать незачем.
Номер ответа: 2
Автор ответа:
Vugar Miriyev
ICQ: 321950466
Вопросов: 24
Ответов: 28
Web-сайт:
Профиль | | #2
Добавлено: 29.03.07 15:16
Дело в том, что при этом происходит подмена рисунка для бакграунда и подстановка region-а этого рисунка:
> ClsClip1.ApplyScannedBitmap(Me.BackgroundImage)
> ClsClip1.ApplyScannedBitmapRegion(Me.Region)
При этом странно то, что бакграунд на самом деле перерисовывается, но без вхождения в событие Paint.
Номер ответа: 3
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #3
Добавлено: 29.03.07 15:19
подмена фона не есть PAINT
Номер ответа: 4
Автор ответа:
Vugar Miriyev
ICQ: 321950466
Вопросов: 24
Ответов: 28
Web-сайт:
Профиль | | #4
Добавлено: 29.03.07 15:28
Но фактически контрол должен же перерисоваться для того, чтобы показать новый бакграунд. Более того, почему тот же самый код при mousedown инициирует событие paint.
Номер ответа: 5
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #5
Добавлено: 29.03.07 20:17
используй invalidate
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 29.03.07 22:30
лови PaintBackground