Public
	Sub AddPaintDC(h As PaintDCHandler)
		If IsNothing(paintDC) Then
			paintDC = h
		Else
			paintDC += h
		End If
	End Sub
	Sub RemovePaintDC(h As PaintDCHandler)
		If Not IsNothing(paintDC) Then
			paintDC -= h
		End If
	End Sub
Protected
	Function OnPaintDC(e As PaintDCArgs) As Boolean
		If Not IsNothing(paintDC) Then
			paintDC(This, e)
			Return True
		End If
	End Function
Private
	paintDC As PaintDCHandler

Public
	Sub AddClick(h As Handler)
		If IsNothing(click) Then
			click = h
		Else
			click += h
		End If
	End Sub
	Sub RemoveClick(h As Handler)
		If Not IsNothing(click) Then
			click -= h
		End If
	End Sub
Protected
	Function OnClick(e As Args) As Boolean
		If Not IsNothing(click) Then
			click(This, e)
			Return True
		End If
	End Function
Private
	click As Handler

Public
	Sub AddDoubleClick(h As Handler)
		If IsNothing(doubleClick) Then
			doubleClick = h
		Else
			doubleClick += h
		End If
	End Sub
	Sub RemoveDoubleClick(h As Handler)
		If Not IsNothing(doubleClick) Then
			doubleClick -= h
		End If
	End Sub
Protected
	Function OnDoubleClick(e As Args) As Boolean
		If Not IsNothing(doubleClick) Then
			doubleClick(This, e)
			Return True
		End If
	End Function
Private
	doubleClick As Handler

Public
	Sub AddMove(h As Handler)
		If IsNothing(move) Then
			move = h
		Else
			move += h
		End If
	End Sub
	Sub RemoveMove(h As Handler)
		If Not IsNothing(move) Then
			move -= h
		End If
	End Sub
Protected
	Function OnMove(e As Args) As Boolean
		If Not IsNothing(move) Then
			move(This, e)
			Return True
		End If
	End Function
Private
	move As Handler

Public
	Sub AddResize(h As ResizeHandler)
		If IsNothing(resize) Then
			resize = h
		Else
			resize += h
		End If
	End Sub
	Sub RemoveResize(h As ResizeHandler)
		If Not IsNothing(resize) Then
			resize -= h
		End If
	End Sub
Protected
	Function OnResize(e As ResizeArgs) As Boolean
		If Not IsNothing(resize) Then
			resize(This, e)
			Return True
		End If
	End Function
Private
	resize As ResizeHandler

Public
	Sub AddMouseEnter(h As MouseHandler)
		If IsNothing(mouseEnter) Then
			mouseEnter = h
		Else
			mouseEnter += h
		End If
	End Sub
	Sub RemoveMouseEnter(h As MouseHandler)
		If Not IsNothing(mouseEnter) Then
			mouseEnter -= h
		End If
	End Sub
Protected
	Function OnMouseEnter(e As MouseArgs) As Boolean
		If Not IsNothing(mouseEnter) Then
			mouseEnter(This, e)
			Return True
		End If
	End Function
Private
	mouseEnter As MouseHandler

Public
	Sub AddMouseMove(h As MouseHandler)
		If IsNothing(mouseMove) Then
			mouseMove = h
		Else
			mouseMove += h
		End If
	End Sub
	Sub RemoveMouseMove(h As MouseHandler)
		If Not IsNothing(mouseMove) Then
			mouseMove -= h
		End If
	End Sub
Protected
	Function OnMouseMove(e As MouseArgs) As Boolean
		If Not IsNothing(mouseMove) Then
			mouseMove(This, e)
			Return True
		End If
	End Function
Private
	mouseMove As MouseHandler

Public
	Sub AddMouseHover(h As MouseHandler)
		If IsNothing(mouseHover) Then
			mouseHover = h
		Else
			mouseHover += h
		End If
	End Sub
	Sub RemoveMouseHover(h As MouseHandler)
		If Not IsNothing(mouseHover) Then
			mouseHover -= h
		End If
	End Sub
Protected
	Function OnMouseHover(e As MouseArgs) As Boolean
		If Not IsNothing(mouseHover) Then
			mouseHover(This, e)
			Return True
		End If
	End Function
Private
	mouseHover As MouseHandler

Public
	Sub AddMouseLeave(h As Handler)
		If IsNothing(mouseLeave) Then
			mouseLeave = h
		Else
			mouseLeave += h
		End If
	End Sub
	Sub RemoveMouseLeave(h As Handler)
		If Not IsNothing(mouseLeave) Then
			mouseLeave -= h
		End If
	End Sub
Protected
	Function OnMouseLeave(e As Args) As Boolean
		If Not IsNothing(mouseLeave) Then
			mouseLeave(This, e)
			Return True
		End If
	End Function
Private
	mouseLeave As Handler

Public
	Sub AddMouseDown(h As MouseHandler)
		If IsNothing(mouseDown) Then
			mouseDown = h
		Else
			mouseDown += h
		End If
	End Sub
	Sub RemoveMouseDown(h As MouseHandler)
		If Not IsNothing(mouseDown) Then
			mouseDown -= h
		End If
	End Sub
Protected
	Function OnMouseDown(e As MouseArgs) As Boolean
		If Not IsNothing(mouseDown) Then
			mouseDown(This, e)
			Return True
		End If
	End Function
Private
	mouseDown As MouseHandler

Public
	Sub AddMouseClick(h As MouseHandler)
		If IsNothing(mouseClick) Then
			mouseClick = h
		Else
			mouseClick += h
		End If
	End Sub
	Sub RemoveMouseClick(h As MouseHandler)
		If Not IsNothing(mouseClick) Then
			mouseClick -= h
		End If
	End Sub
Protected
	Function OnMouseClick(e As MouseArgs) As Boolean
		If Not IsNothing(mouseClick) Then
			mouseClick(This, e)
			Return True
		End If
	End Function
Private
	mouseClick As MouseHandler

Public
	Sub AddMouseDoubleClick(h As MouseHandler)
		If IsNothing(mouseDoubleClick) Then
			mouseDoubleClick = h
		Else
			mouseDoubleClick += h
		End If
	End Sub
	Sub RemoveMouseDoubleClick(h As MouseHandler)
		If Not IsNothing(mouseDoubleClick) Then
			mouseDoubleClick -= h
		End If
	End Sub
Protected
	Function OnMouseDoubleClick(e As MouseArgs) As Boolean
		If Not IsNothing(mouseDoubleClick) Then
			mouseDoubleClick(This, e)
			Return True
		End If
	End Function
Private
	mouseDoubleClick As MouseHandler

Public
	Sub AddMouseUp(h As MouseHandler)
		If IsNothing(mouseUp) Then
			mouseUp = h
		Else
			mouseUp += h
		End If
	End Sub
	Sub RemoveMouseUp(h As MouseHandler)
		If Not IsNothing(mouseUp) Then
			mouseUp -= h
		End If
	End Sub
Protected
	Function OnMouseUp(e As MouseArgs) As Boolean
		If Not IsNothing(mouseUp) Then
			mouseUp(This, e)
			Return True
		End If
	End Function
Private
	mouseUp As MouseHandler

Public
	Sub AddKeyDown(h As KeyHandler)
		If IsNothing(keyDown) Then
			keyDown = h
		Else
			keyDown += h
		End If
	End Sub
	Sub RemoveKeyDown(h As KeyHandler)
		If Not IsNothing(keyDown) Then
			keyDown -= h
		End If
	End Sub
Protected
	Function OnKeyDown(e As KeyArgs) As Boolean
		If Not IsNothing(keyDown) Then
			keyDown(This, e)
			Return True
		End If
	End Function
Private
	keyDown As KeyHandler

Public
	Sub AddKeyUp(h As KeyHandler)
		If IsNothing(keyUp) Then
			keyUp = h
		Else
			keyUp += h
		End If
	End Sub
	Sub RemoveKeyUp(h As KeyHandler)
		If Not IsNothing(keyUp) Then
			keyUp -= h
		End If
	End Sub
Protected
	Function OnKeyUp(e As KeyArgs) As Boolean
		If Not IsNothing(keyUp) Then
			keyUp(This, e)
			Return True
		End If
	End Function
Private
	keyUp As KeyHandler

Public
	Sub AddKeyPress(h As KeyPressHandler)
		If IsNothing(keyPress) Then
			keyPress = h
		Else
			keyPress += h
		End If
	End Sub
	Sub RemoveKeyPress(h As KeyPressHandler)
		If Not IsNothing(keyPress) Then
			keyPress -= h
		End If
	End Sub
Protected
	Function OnKeyPress(e As KeyPressArgs) As Boolean
		If Not IsNothing(keyPress) Then
			keyPress(This, e)
			Return True
		End If
	End Function
Private
	keyPress As KeyPressHandler

Public
	Sub AddCreate(h As CreateHandler)
		If IsNothing(create) Then
			create = h
		Else
			create += h
		End If
	End Sub
	Sub RemoveCreate(h As CreateHandler)
		If Not IsNothing(create) Then
			create -= h
		End If
	End Sub
Protected
	Function OnCreate(e As CreateArgs) As Boolean
		If Not IsNothing(create) Then
			create(This, e)
			Return True
		End If
	End Function
Private
	create As CreateHandler

Public
	Sub AddDestroy(h As Handler)
		If IsNothing(destroy) Then
			destroy = h
		Else
			destroy += h
		End If
	End Sub
	Sub RemoveDestroy(h As Handler)
		If Not IsNothing(destroy) Then
			destroy -= h
		End If
	End Sub
Protected
	Function OnDestroy(e As Args) As Boolean
		If Not IsNothing(destroy) Then
			destroy(This, e)
			Return True
		End If
	End Function
Private
	destroy As Handler

Public
	Sub AddPaintBackground(h As PaintBackgroundHandler)
		If IsNothing(paintBackground) Then
			paintBackground = h
		Else
			paintBackground += h
		End If
	End Sub
	Sub RemovePaintBackground(h As PaintBackgroundHandler)
		If Not IsNothing(paintBackground) Then
			paintBackground -= h
		End If
	End Sub
Protected
	Function OnPaintBackground(e As PaintBackgroundArgs) As Boolean
		If Not IsNothing(paintBackground) Then
			paintBackground(This, e)
			Return True
		End If
	End Function
Private
	paintBackground As PaintBackgroundHandler

