471,578 Members | 1,537 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,578 software developers and data experts.

Inherited form - Protected sub / Derived form - Private Shadows subs

Is the following behavior normal?

Both the 'Protected sub' in the inherited form and the 'Private Shadows
sub' in the derived form fires.

My interpretation of MSDN help on the topic "Shadows" does not seem to
indicate that this is the designed behavior. (the topic is rather
cryptic to me.

Here is my code;

=== In the Inherited form is this code; ===
Protected Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmForm1")
'Highlight the entire row
'Get the X and Y of the DataGrid from the mouse event
Dim pt As New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = Me.DataGrid1.HitTest(pt)

If hti.Type = DataGrid.HitTestType.Cell Then
'Me.DataGrid1.CurrentCell = New DataGridCell(hti.Row,
hti.Column)
Me.DataGrid1.Select(hti.Row)
End If

End Sub
=== In the derived form is this code; ===

Private Shadows Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal
e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmJobCustomer")
Call PopulateStatusBarData()
Call RowSelectedToEdit()
End Sub

=========================================
Both subs fire. First the code in the inherited form and second the
code in the derived from.

This is the behavior I desire, but is this behavior what it is supposed
to do - can I rely on it?

Thank you,
Doug.

Nov 21 '05 #1
4 3608
Yes it is. You're using a handles statement which is registering each
method with the event. You'd be better off with something more like this:

' Base Class
Private Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MyEventHandler(e)
End Sub

Protected Overridable Sub MyEventHandler(ByVal e As
System.Windows.Forms.MouseEventArgs)
' Base Class Functionality
End Sub
' Derived Class
Protected Overrides Sub MyEventHandler(ByVal e As
System.Windows.Forms.MouseEventArgs)
MyBase.MyEventHandler(e)
' Derived Functionality
End Sub

Same result but much cleaner.

Richard

"dbuchanan" <db*********@hotmail.com> wrote in message
news:11*********************@f14g2000cwb.googlegro ups.com...
Is the following behavior normal?

Both the 'Protected sub' in the inherited form and the 'Private Shadows
sub' in the derived form fires.

My interpretation of MSDN help on the topic "Shadows" does not seem to
indicate that this is the designed behavior. (the topic is rather
cryptic to me.

Here is my code;od

=== In the Inherited form is this code; ===
Protected Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmForm1")
'Highlight the entire row
'Get the X and Y of the DataGrid from the mouse event
Dim pt As New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = Me.DataGrid1.HitTest(pt)

If hti.Type = DataGrid.HitTestType.Cell Then
'Me.DataGrid1.CurrentCell = New DataGridCell(hti.Row,
hti.Column)
Me.DataGrid1.Select(hti.Row)
End If

End Sub
=== In the derived form is this code; ===

Private Shadows Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal
e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmJobCustomer")
Call PopulateStatusBarData()
Call RowSelectedToEdit()
End Sub

=========================================
Both subs fire. First the code in the inherited form and second the
code in the derived from.

This is the behavior I desire, but is this behavior what it is supposed
to do - can I rely on it?

Thank you,
Doug.

Nov 21 '05 #2
I think you can do the same thing by using the "OnMouseUp" overridable event
of the base class:

In the derived class:

Protected Overrides Sub OnMouseUp(ByVal e As
System.Windows.Forms.MouseEventArgs)

'Do you thing here and don't call MyBase.OnMouseUp since this would in turn
call the MouseUp event in your base class. If you want to fire the MouseUp
event in the program's parent, then you can set up an event called mouseup in
the derived class and raise that event in this sub.

If you want to call that event, then add

MyBase.OnMouseUp(e)

End Sub

"Richard Myers" wrote:
Yes it is. You're using a handles statement which is registering each
method with the event. You'd be better off with something more like this:

' Base Class
Private Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MyEventHandler(e)
End Sub

Protected Overridable Sub MyEventHandler(ByVal e As
System.Windows.Forms.MouseEventArgs)
' Base Class Functionality
End Sub
' Derived Class
Protected Overrides Sub MyEventHandler(ByVal e As
System.Windows.Forms.MouseEventArgs)
MyBase.MyEventHandler(e)
' Derived Functionality
End Sub

Same result but much cleaner.

Richard

"dbuchanan" <db*********@hotmail.com> wrote in message
news:11*********************@f14g2000cwb.googlegro ups.com...
Is the following behavior normal?

Both the 'Protected sub' in the inherited form and the 'Private Shadows
sub' in the derived form fires.

My interpretation of MSDN help on the topic "Shadows" does not seem to
indicate that this is the designed behavior. (the topic is rather
cryptic to me.

Here is my code;od

=== In the Inherited form is this code; ===
Protected Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmForm1")
'Highlight the entire row
'Get the X and Y of the DataGrid from the mouse event
Dim pt As New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = Me.DataGrid1.HitTest(pt)

If hti.Type = DataGrid.HitTestType.Cell Then
'Me.DataGrid1.CurrentCell = New DataGridCell(hti.Row,
hti.Column)
Me.DataGrid1.Select(hti.Row)
End If

End Sub
=== In the derived form is this code; ===

Private Shadows Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal
e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmJobCustomer")
Call PopulateStatusBarData()
Call RowSelectedToEdit()
End Sub

=========================================
Both subs fire. First the code in the inherited form and second the
code in the derived from.

This is the behavior I desire, but is this behavior what it is supposed
to do - can I rely on it?

Thank you,
Doug.


Nov 21 '05 #3

Hi Dennis

I disagree with what you have posted.
I think you can do the same thing by using the "OnMouseUp" overridable event of the base class:
This would require he subclass the datagrid class it wouldn;t work using
his current form class. Which means displaying message boxes from controls
which is really ugly.

In the derived class:

Protected Overrides Sub OnMouseUp(ByVal e As
System.Windows.Forms.MouseEventArgs)
.
'Do you thing here and don't call MyBase.OnMouseUp since this would in turn call the MouseUp event in your base class.
He must call MyBase.OnMouseUp ( or whatever he decides to call it) as he
has functionlity that he wishes to run in the base class. He hasn't said
he's trying to suppress the event. He simply wants to run some code in base
class to derived class order which is the whole point of using
MyBase.OnMouseUp first.

If you want to fire the MouseUp event in the program's parent, then you can set up an event called mouseup in the derived class and raise that event in this sub.

If you want to call that event, then add

MyBase.OnMouseUp(e)

End Sub
Why does he need to create another event called MouseUp? He already has
this event in both the form and the datagrid? And how does this code fire
that event?
MyBase.OnMouseUp(e) calls the sub in the base class would in turn fires the
base class MouseUp event not his custom event.

"Richard Myers" wrote:
Yes it is. You're using a handles statement which is registering each
method with the event. You'd be better off with something more like this:
' Base Class
Private Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MyEventHandler(e)
End Sub

Protected Overridable Sub MyEventHandler(ByVal e As
System.Windows.Forms.MouseEventArgs)
' Base Class Functionality
End Sub
' Derived Class
Protected Overrides Sub MyEventHandler(ByVal e As
System.Windows.Forms.MouseEventArgs)
MyBase.MyEventHandler(e)
' Derived Functionality
End Sub

Same result but much cleaner.

Richard

"dbuchanan" <db*********@hotmail.com> wrote in message
news:11*********************@f14g2000cwb.googlegro ups.com...
Is the following behavior normal?

Both the 'Protected sub' in the inherited form and the 'Private Shadows sub' in the derived form fires.

My interpretation of MSDN help on the topic "Shadows" does not seem to indicate that this is the designed behavior. (the topic is rather
cryptic to me.

Here is my code;od

=== In the Inherited form is this code; ===
Protected Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmForm1")
'Highlight the entire row
'Get the X and Y of the DataGrid from the mouse event
Dim pt As New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = Me.DataGrid1.HitTest(pt)

If hti.Type = DataGrid.HitTestType.Cell Then
'Me.DataGrid1.CurrentCell = New DataGridCell(hti.Row,
hti.Column)
Me.DataGrid1.Select(hti.Row)
End If

End Sub
=== In the derived form is this code; ===

Private Shadows Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
MessageBox.Show("DataGrid1_MouseUp - frmJobCustomer")
Call PopulateStatusBarData()
Call RowSelectedToEdit()
End Sub

=========================================
Both subs fire. First the code in the inherited form and second the
code in the derived from.

This is the behavior I desire, but is this behavior what it is supposed to do - can I rely on it?

Thank you,
Doug.


Nov 21 '05 #4
Richard and Dennis,

Thank you for your discussion. In the mean time I made a few
discoveries and ended solving it in the following manner.

'Base Class
Protected Overridable Sub DataGrid1_MouseUp(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs) Handles
DataGrid1.MouseUp
'MessageBox.Show("DataGrid1_MouseUp - frmForm1")
'Highlight the entire row
'Get the X and Y of the DataGrid from the mouse event
Dim pt As New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = Me.DataGrid1.HitTest(pt)

If hti.Type = DataGrid.HitTestType.Cell Then
'Me.DataGrid1.CurrentCell = New DataGridCell(hti.Row,
hti.Column)
Me.DataGrid1.Select(hti.Row)
End If
'MessageBox.Show("Row highlighted")
End Sub

'Derived Class

Protected Overrides Sub DataGrid1_MouseUp(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs) Handles
DataGrid1.MouseUp
'MessageBox.Show("DataGrid1_MouseUp - frmForm1")
MyBase.DataGrid1_MouseUp(sender, e)
'Local implementation
Call PopulateStatusBarData()
Call RowSelectedToEdit()
End Sub

Is this the most efficient way to do this?

-Doug

Nov 21 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

10 posts views Thread by Chad Miller | last post: by
9 posts views Thread by Brian Henry | last post: by
3 posts views Thread by dbuchanan | last post: by
5 posts views Thread by MrJim | last post: by
5 posts views Thread by Martin | last post: by
4 posts views Thread by EmilH | last post: by
reply views Thread by leo001 | last post: by
reply views Thread by Vinnie | last post: by
1 post views Thread by lumer26 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.