Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Почему не срабатывает Paint? Добавлено: 29.03.07 12:25  

Автор вопроса:  Vugar Miriyev | Web-сайт: www.novadotnet.com | ICQ: 321950466 
Поытка сделать свой контрол кнопку на основе контрола панель. Столкнулся с проблемой при прорисовке. Проблема в том, что событие 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-сайт: www.novadotnet.com
 Профиль | | #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-сайт: www.novadotnet.com
 Профиль | | #4
Добавлено: 29.03.07 15:28
Но фактически контрол должен же перерисоваться для того, чтобы показать новый бакграунд. Более того, почему тот же самый код при mousedown инициирует событие paint.

Ответить

Номер ответа: 5
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #5
Добавлено: 29.03.07 20:17
используй invalidate

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 29.03.07 22:30
лови PaintBackground

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам