By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,526 Members | 1,895 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,526 IT Pros & Developers. It's quick & easy.

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

P: n/a
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
Share this Question
Share on Google+
4 Replies


P: n/a
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

P: n/a
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

P: n/a

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

P: n/a
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.