Changing Color of Textbox on Hover

Discussion in 'Microsoft VB .NET' started by Henry Jones, Dec 1, 2006.

  1. Henry Jones

    Henry Jones Guest

    I have a VS 2005 VB.NET project and would like to change the color of the
    textbox when the user hovers over it. In a Module I have the following
    routines:

    Public Sub Button_Hover(ByRef btnName As Button)

    btnName.BackColor = Color.BlanchedAlmond

    End Sub

    Public Sub Button_Leave(ByRef btnName As Button)

    btnName.BackColor = Color.Transparent

    End Sub

    ----------------------------------------------



    I called the routines from the following code:



    Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    System.EventArgs) Handles cmdTierCancel.MouseHover

    Button_Hover(cmdTierCancel)

    End Sub

    Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    System.EventArgs) Handles cmdTierCancel.MouseLeave

    Button_Leave(cmdTierCancel)

    End Sub

    ---------------------------------

    SO FAR SO GOOD. I thought it would be nice to use the Handles feature and
    call the routine like this:

    ---------------------------------

    Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e As
    System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover

    Button_Leave(sender)

    End Sub



    But this routine doesn't work. Can anyone tell me what I am doing wrong?



    Thanks
     
    Henry Jones, Dec 1, 2006
    #1
    1. Advertisements

  2. Henry Jones

    Henry Jones Guest

    Typo on the above message

    In the last routine, Button_Leave should be Button_Hover


    "Henry Jones" <> wrote in message
    news:...
    >I have a VS 2005 VB.NET project and would like to change the color of the
    >textbox when the user hovers over it. In a Module I have the following
    >routines:
    >
    > Public Sub Button_Hover(ByRef btnName As Button)
    >
    > btnName.BackColor = Color.BlanchedAlmond
    >
    > End Sub
    >
    > Public Sub Button_Leave(ByRef btnName As Button)
    >
    > btnName.BackColor = Color.Transparent
    >
    > End Sub
    >
    > ----------------------------------------------
    >
    >
    >
    > I called the routines from the following code:
    >
    >
    >
    > Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles cmdTierCancel.MouseHover
    >
    > Button_Hover(cmdTierCancel)
    >
    > End Sub
    >
    > Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles cmdTierCancel.MouseLeave
    >
    > Button_Leave(cmdTierCancel)
    >
    > End Sub
    >
    > ---------------------------------
    >
    > SO FAR SO GOOD. I thought it would be nice to use the Handles feature and
    > call the routine like this:
    >
    > ---------------------------------
    >
    > Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e As
    > System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >
    > Button_Leave(sender)
    >
    > End Sub
    >
    >
    >
    > But this routine doesn't work. Can anyone tell me what I am doing wrong?
    >
    >
    >
    > Thanks
    >
    >
    >
    >
    >
    >
    >
    >
     
    Henry Jones, Dec 1, 2006
    #2
    1. Advertisements

  3. Henry Jones

    Tim Patrick Guest

    Did you intend to call Button_Hover from your final Handles-enabled routine,
    or was that just a typo?

    -----
    Tim Patrick - www.timaki.com
    Start-to-Finish Visual Basic 2005

    > I have a VS 2005 VB.NET project and would like to change the color of
    > the textbox when the user hovers over it. In a Module I have the
    > following routines:
    >
    > Public Sub Button_Hover(ByRef btnName As Button)
    >
    > btnName.BackColor = Color.BlanchedAlmond
    >
    > End Sub
    >
    > Public Sub Button_Leave(ByRef btnName As Button)
    >
    > btnName.BackColor = Color.Transparent
    >
    > End Sub
    >
    > ----------------------------------------------
    >
    > I called the routines from the following code:
    >
    > Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e
    > As System.EventArgs) Handles cmdTierCancel.MouseHover
    >
    > Button_Hover(cmdTierCancel)
    >
    > End Sub
    >
    > Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e
    > As System.EventArgs) Handles cmdTierCancel.MouseLeave
    >
    > Button_Leave(cmdTierCancel)
    >
    > End Sub
    >
    > ---------------------------------
    >
    > SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    > and call the routine like this:
    >
    > ---------------------------------
    >
    > Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e
    > As System.EventArgs) cmd1.MouseHover, cmd2.MouseHover,
    > cmd3.MouseHover
    >
    > Button_Leave(sender)
    >
    > End Sub
    >
    > But this routine doesn't work. Can anyone tell me what I am doing
    > wrong?
    >
    > Thanks
    >
     
    Tim Patrick, Dec 1, 2006
    #3
  4. Henry,

    I am interested. What makes it that you think nicer to use handles instead
    of .Net methods?

    Cor

    You want to show that you are a starting programmer or something like that?
    "Henry Jones" <> schreef in bericht
    news:...
    >I have a VS 2005 VB.NET project and would like to change the color of the
    >textbox when the user hovers over it. In a Module I have the following
    >routines:
    >
    > Public Sub Button_Hover(ByRef btnName As Button)
    >
    > btnName.BackColor = Color.BlanchedAlmond
    >
    > End Sub
    >
    > Public Sub Button_Leave(ByRef btnName As Button)
    >
    > btnName.BackColor = Color.Transparent
    >
    > End Sub
    >
    > ----------------------------------------------
    >
    >
    >
    > I called the routines from the following code:
    >
    >
    >
    > Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles cmdTierCancel.MouseHover
    >
    > Button_Hover(cmdTierCancel)
    >
    > End Sub
    >
    > Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles cmdTierCancel.MouseLeave
    >
    > Button_Leave(cmdTierCancel)
    >
    > End Sub
    >
    > ---------------------------------
    >
    > SO FAR SO GOOD. I thought it would be nice to use the Handles feature and
    > call the routine like this:
    >
    > ---------------------------------
    >
    > Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e As
    > System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >
    > Button_Leave(sender)
    >
    > End Sub
    >
    >
    >
    > But this routine doesn't work. Can anyone tell me what I am doing wrong?
    >
    >
    >
    > Thanks
    >
    >
    >
    >
    >
    >
    >
    >
     
    Cor Ligthert [MVP], Dec 1, 2006
    #4
  5. Henry Jones

    Henry Jones Guest

    I thought it be cleaner to use one routine that handles many buttons than to
    create more code. Better for maintenance later on. Am I wrong?
    But that isn't the point. I would like to know how to do it, now that I
    have thought of it. I don't know if it's good programming practice, but
    that is what these forums are all about.

    Thanks,

    Henry

    "Cor Ligthert [MVP]" <> wrote in message
    news:%...
    > Henry,
    >
    > I am interested. What makes it that you think nicer to use handles instead
    > of .Net methods?
    >
    > Cor
    >
    > You want to show that you are a starting programmer or something like
    > that?
    > "Henry Jones" <> schreef in bericht
    > news:...
    >>I have a VS 2005 VB.NET project and would like to change the color of the
    >>textbox when the user hovers over it. In a Module I have the following
    >>routines:
    >>
    >> Public Sub Button_Hover(ByRef btnName As Button)
    >>
    >> btnName.BackColor = Color.BlanchedAlmond
    >>
    >> End Sub
    >>
    >> Public Sub Button_Leave(ByRef btnName As Button)
    >>
    >> btnName.BackColor = Color.Transparent
    >>
    >> End Sub
    >>
    >> ----------------------------------------------
    >>
    >>
    >>
    >> I called the routines from the following code:
    >>
    >>
    >>
    >> Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    >> System.EventArgs) Handles cmdTierCancel.MouseHover
    >>
    >> Button_Hover(cmdTierCancel)
    >>
    >> End Sub
    >>
    >> Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    >> System.EventArgs) Handles cmdTierCancel.MouseLeave
    >>
    >> Button_Leave(cmdTierCancel)
    >>
    >> End Sub
    >>
    >> ---------------------------------
    >>
    >> SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    >> and call the routine like this:
    >>
    >> ---------------------------------
    >>
    >> Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e As
    >> System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >>
    >> Button_Leave(sender)
    >>
    >> End Sub
    >>
    >>
    >>
    >> But this routine doesn't work. Can anyone tell me what I am doing wrong?
    >>
    >>
    >>
    >> Thanks
    >>
    >>
    >>
    >>
    >>
    >>
    >>
    >>

    >
    >
     
    Henry Jones, Dec 1, 2006
    #5
  6. Henry Jones

    RobinS Guest

    Re: Typo on the above message

    In the last routine, shouldn't the Handles keyword come
    after the "(ByVal sender as Object, e as EventArgs)"
    and before cmd1.MouseHover, etc.?

    Robin S.
    ------------------------------------------
    "Henry Jones" <> wrote in message
    news:OTla$...
    > In the last routine, Button_Leave should be Button_Hover
    >
    >
    > "Henry Jones" <> wrote in message
    > news:...
    >>I have a VS 2005 VB.NET project and would like to change the color of the
    >>textbox when the user hovers over it. In a Module I have the following
    >>routines:
    >>
    >> Public Sub Button_Hover(ByRef btnName As Button)
    >>
    >> btnName.BackColor = Color.BlanchedAlmond
    >>
    >> End Sub
    >>
    >> Public Sub Button_Leave(ByRef btnName As Button)
    >>
    >> btnName.BackColor = Color.Transparent
    >>
    >> End Sub
    >>
    >> ----------------------------------------------
    >>
    >>
    >>
    >> I called the routines from the following code:
    >>
    >>
    >>
    >> Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    >> System.EventArgs) Handles cmdTierCancel.MouseHover
    >>
    >> Button_Hover(cmdTierCancel)
    >>
    >> End Sub
    >>
    >> Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    >> System.EventArgs) Handles cmdTierCancel.MouseLeave
    >>
    >> Button_Leave(cmdTierCancel)
    >>
    >> End Sub
    >>
    >> ---------------------------------
    >>
    >> SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    >> and call the routine like this:
    >>
    >> ---------------------------------
    >>
    >> Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e As
    >> System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >>
    >> Button_Leave(sender)
    >>
    >> End Sub
    >>
    >>
    >>
    >> But this routine doesn't work. Can anyone tell me what I am doing wrong?
    >>
    >>
    >>
    >> Thanks
    >>
    >>
    >>
    >>
    >>
    >>
    >>
    >>

    >
    >
     
    RobinS, Dec 1, 2006
    #6
  7. Henry Jones

    Henry Jones Guest

    Re: Typo on the above message

    Yes, that was another "cut and paste" typo. In my code, it is correct.
    Oops.



    "RobinS" <> wrote in message
    news:...
    > In the last routine, shouldn't the Handles keyword come
    > after the "(ByVal sender as Object, e as EventArgs)"
    > and before cmd1.MouseHover, etc.?
    >
    > Robin S.
    > ------------------------------------------
    > "Henry Jones" <> wrote in message
    > news:OTla$...
    >> In the last routine, Button_Leave should be Button_Hover
    >>
    >>
    >> "Henry Jones" <> wrote in message
    >> news:...
    >>>I have a VS 2005 VB.NET project and would like to change the color of the
    >>>textbox when the user hovers over it. In a Module I have the following
    >>>routines:
    >>>
    >>> Public Sub Button_Hover(ByRef btnName As Button)
    >>>
    >>> btnName.BackColor = Color.BlanchedAlmond
    >>>
    >>> End Sub
    >>>
    >>> Public Sub Button_Leave(ByRef btnName As Button)
    >>>
    >>> btnName.BackColor = Color.Transparent
    >>>
    >>> End Sub
    >>>
    >>> ----------------------------------------------
    >>>
    >>>
    >>>
    >>> I called the routines from the following code:
    >>>
    >>>
    >>>
    >>> Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    >>> System.EventArgs) Handles cmdTierCancel.MouseHover
    >>>
    >>> Button_Hover(cmdTierCancel)
    >>>
    >>> End Sub
    >>>
    >>> Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    >>> System.EventArgs) Handles cmdTierCancel.MouseLeave
    >>>
    >>> Button_Leave(cmdTierCancel)
    >>>
    >>> End Sub
    >>>
    >>> ---------------------------------
    >>>
    >>> SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    >>> and call the routine like this:
    >>>
    >>> ---------------------------------
    >>>
    >>> Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e
    >>> As System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >>>
    >>> Button_Leave(sender)
    >>>
    >>> End Sub
    >>>
    >>>
    >>>
    >>> But this routine doesn't work. Can anyone tell me what I am doing
    >>> wrong?
    >>>
    >>>
    >>>
    >>> Thanks
    >>>
    >>>
    >>>
    >>>
    >>>
    >>>
    >>>
    >>>

    >>
    >>

    >
    >
     
    Henry Jones, Dec 1, 2006
    #7
  8. Henry Jones

    RobinS Guest

    Henry,

    I have a routine in my base form that adds event handlers for
    mouseenter and mouseleave to textboxes. This changes the backcolor
    when the user enters the textbox, and changes it back when he leaves.
    I learned this from Deborah Kurata book, Doing Objects in VB2005
    (just to give credit where credit is due).

    To do this, I cycle through the controls on my forms and
    use AddHandler to add the event handlers to each control.

    If I add new controls of that type to the form,
    they are automatically handled.

    If I remove controls from the form, that is automatically
    handled; I don't need to remove them from any Handles clauses.

    Also, all controls of the same type are handled the same way.

    I actually have this code in a base form, and all of my forms
    inherit from it. That way, I have the same behavior on every
    form in my application. (As one of my old teachers used to say,
    "Right or wrong, be consistent.")

    Here's the code. This is recursive to handle the cases where you
    have controls within controls, like textboxes within panels. I
    didn't try this out, but it's almost identical to my code that
    does the textboxes.

    In Form_Load, add this: AddEventHandlers(me)

    Private Sub AddEventHandlers(ByVal ctrlContainer As Control)
    For Each ctrl As Control In ctrlContainer.Controls
    If TypeOf ctrl Is Button Then
    'When the MouseHover event is raised for this button,
    ' run the Button_Hover routine.
    AddHandler ctrl.MouseHover, AddressOf Button_Hover
    'When the MouseLeave event is raised for this button,
    ' run the Button_Leave routine.
    AddHandler ctrl.MouseLeave, AddressOf Button_Leave
    End If
    'if control has children, call this function recursively
    If ctrl.HasChildren Then
    AddEventHandlers(ctrl)
    End If
    Next
    End Sub

    Public Sub Button_Hover(ByVal sender as Object, _
    ByVal e as System.EventArgs)
    DirectCast(sender, Control).BackColor = _
    Color.BlanchedAlmond
    End Sub

    Public Sub Button_Leave(ByVal sender as Object, _
    ByVal e as System.EventArgs)
    DirectCast(sender, Control).BackColor = _
    Color.Transparent
    'Note: you can also change this to one of
    ' the known colors, like the color of
    ' the buttonface:
    'DirectCast(sender, Control).BackColor = _
    ' Color.FromKnownColor(KnownColor.ButtonFace)
    End Sub

    What do you think?
    Robin S.
    ------------------------------------------

    "Henry Jones" <> wrote in message
    news:...
    >I thought it be cleaner to use one routine that handles many buttons than
    >to create more code. Better for maintenance later on. Am I wrong?
    > But that isn't the point. I would like to know how to do it, now that I
    > have thought of it. I don't know if it's good programming practice, but
    > that is what these forums are all about.
    >
    > Thanks,
    >
    > Henry
    >
    > "Cor Ligthert [MVP]" <> wrote in message
    > news:%...
    >> Henry,
    >>
    >> I am interested. What makes it that you think nicer to use handles
    >> instead of .Net methods?
    >>
    >> Cor
    >>
    >> You want to show that you are a starting programmer or something like
    >> that?
    >> "Henry Jones" <> schreef in bericht
    >> news:...
    >>>I have a VS 2005 VB.NET project and would like to change the color of the
    >>>textbox when the user hovers over it. In a Module I have the following
    >>>routines:
    >>>
    >>> Public Sub Button_Hover(ByRef btnName As Button)
    >>>
    >>> btnName.BackColor = Color.BlanchedAlmond
    >>>
    >>> End Sub
    >>>
    >>> Public Sub Button_Leave(ByRef btnName As Button)
    >>>
    >>> btnName.BackColor = Color.Transparent
    >>>
    >>> End Sub
    >>>
    >>> ----------------------------------------------
    >>>
    >>>
    >>>
    >>> I called the routines from the following code:
    >>>
    >>>
    >>>
    >>> Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    >>> System.EventArgs) Handles cmdTierCancel.MouseHover
    >>>
    >>> Button_Hover(cmdTierCancel)
    >>>
    >>> End Sub
    >>>
    >>> Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    >>> System.EventArgs) Handles cmdTierCancel.MouseLeave
    >>>
    >>> Button_Leave(cmdTierCancel)
    >>>
    >>> End Sub
    >>>
    >>> ---------------------------------
    >>>
    >>> SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    >>> and call the routine like this:
    >>>
    >>> ---------------------------------
    >>>
    >>> Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e
    >>> As System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >>>
    >>> Button_Leave(sender)
    >>>
    >>> End Sub
    >>>
    >>>
    >>>
    >>> But this routine doesn't work. Can anyone tell me what I am doing
    >>> wrong?
    >>>
    >>>
    >>>
    >>> Thanks
    >>>
    >>>
    >>>
    >>>
    >>>
    >>>
    >>>
    >>>

    >>
    >>

    >
    >
     
    RobinS, Dec 1, 2006
    #8
  9. Henry Jones

    Henry Jones Guest

    Thank you very much

    Hi RobinS,

    The code works like a charm. Very cool. If you were here in Sunny Los
    Angeles, (maybe you are....dunno) I'd buy you Starbucks Coffee.

    Thanks,

    Henry


    "RobinS" <> wrote in message
    news:...
    > Henry,
    >
    > I have a routine in my base form that adds event handlers for
    > mouseenter and mouseleave to textboxes. This changes the backcolor
    > when the user enters the textbox, and changes it back when he leaves.
    > I learned this from Deborah Kurata book, Doing Objects in VB2005
    > (just to give credit where credit is due).
    >
    > To do this, I cycle through the controls on my forms and
    > use AddHandler to add the event handlers to each control.
    >
    > If I add new controls of that type to the form,
    > they are automatically handled.
    >
    > If I remove controls from the form, that is automatically
    > handled; I don't need to remove them from any Handles clauses.
    >
    > Also, all controls of the same type are handled the same way.
    >
    > I actually have this code in a base form, and all of my forms
    > inherit from it. That way, I have the same behavior on every
    > form in my application. (As one of my old teachers used to say,
    > "Right or wrong, be consistent.")
    >
    > Here's the code. This is recursive to handle the cases where you
    > have controls within controls, like textboxes within panels. I
    > didn't try this out, but it's almost identical to my code that
    > does the textboxes.
    >
    > In Form_Load, add this: AddEventHandlers(me)
    >
    > Private Sub AddEventHandlers(ByVal ctrlContainer As Control)
    > For Each ctrl As Control In ctrlContainer.Controls
    > If TypeOf ctrl Is Button Then
    > 'When the MouseHover event is raised for this button,
    > ' run the Button_Hover routine.
    > AddHandler ctrl.MouseHover, AddressOf Button_Hover
    > 'When the MouseLeave event is raised for this button,
    > ' run the Button_Leave routine.
    > AddHandler ctrl.MouseLeave, AddressOf Button_Leave
    > End If
    > 'if control has children, call this function recursively
    > If ctrl.HasChildren Then
    > AddEventHandlers(ctrl)
    > End If
    > Next
    > End Sub
    >
    > Public Sub Button_Hover(ByVal sender as Object, _
    > ByVal e as System.EventArgs)
    > DirectCast(sender, Control).BackColor = _
    > Color.BlanchedAlmond
    > End Sub
    >
    > Public Sub Button_Leave(ByVal sender as Object, _
    > ByVal e as System.EventArgs)
    > DirectCast(sender, Control).BackColor = _
    > Color.Transparent
    > 'Note: you can also change this to one of
    > ' the known colors, like the color of
    > ' the buttonface:
    > 'DirectCast(sender, Control).BackColor = _
    > ' Color.FromKnownColor(KnownColor.ButtonFace)
    > End Sub
    >
    > What do you think?
    > Robin S.
    > ------------------------------------------
    >
    > "Henry Jones" <> wrote in message
    > news:...
    >>I thought it be cleaner to use one routine that handles many buttons than
    >>to create more code. Better for maintenance later on. Am I wrong?
    >> But that isn't the point. I would like to know how to do it, now that I
    >> have thought of it. I don't know if it's good programming practice, but
    >> that is what these forums are all about.
    >>
    >> Thanks,
    >>
    >> Henry
    >>
    >> "Cor Ligthert [MVP]" <> wrote in message
    >> news:%...
    >>> Henry,
    >>>
    >>> I am interested. What makes it that you think nicer to use handles
    >>> instead of .Net methods?
    >>>
    >>> Cor
    >>>
    >>> You want to show that you are a starting programmer or something like
    >>> that?
    >>> "Henry Jones" <> schreef in bericht
    >>> news:...
    >>>>I have a VS 2005 VB.NET project and would like to change the color of
    >>>>the textbox when the user hovers over it. In a Module I have the
    >>>>following routines:
    >>>>
    >>>> Public Sub Button_Hover(ByRef btnName As Button)
    >>>>
    >>>> btnName.BackColor = Color.BlanchedAlmond
    >>>>
    >>>> End Sub
    >>>>
    >>>> Public Sub Button_Leave(ByRef btnName As Button)
    >>>>
    >>>> btnName.BackColor = Color.Transparent
    >>>>
    >>>> End Sub
    >>>>
    >>>> ----------------------------------------------
    >>>>
    >>>>
    >>>>
    >>>> I called the routines from the following code:
    >>>>
    >>>>
    >>>>
    >>>> Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e As
    >>>> System.EventArgs) Handles cmdTierCancel.MouseHover
    >>>>
    >>>> Button_Hover(cmdTierCancel)
    >>>>
    >>>> End Sub
    >>>>
    >>>> Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e As
    >>>> System.EventArgs) Handles cmdTierCancel.MouseLeave
    >>>>
    >>>> Button_Leave(cmdTierCancel)
    >>>>
    >>>> End Sub
    >>>>
    >>>> ---------------------------------
    >>>>
    >>>> SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    >>>> and call the routine like this:
    >>>>
    >>>> ---------------------------------
    >>>>
    >>>> Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e
    >>>> As System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >>>>
    >>>> Button_Leave(sender)
    >>>>
    >>>> End Sub
    >>>>
    >>>>
    >>>>
    >>>> But this routine doesn't work. Can anyone tell me what I am doing
    >>>> wrong?
    >>>>
    >>>>
    >>>>
    >>>> Thanks
    >>>>
    >>>>
    >>>>
    >>>>
    >>>>
    >>>>
    >>>>
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
     
    Henry Jones, Dec 1, 2006
    #9
  10. Henry Jones

    RobinS Guest

    Re: Thank you very much

    Good! I'm glad. I'm in the SF Bay Area, so it's a bit far
    to drive for coffee!

    Robin S.
    -----------------------
    "Henry Jones" <> wrote in message
    news:%...
    > Hi RobinS,
    >
    > The code works like a charm. Very cool. If you were here in Sunny Los
    > Angeles, (maybe you are....dunno) I'd buy you Starbucks Coffee.
    >
    > Thanks,
    >
    > Henry
    >
    >
    > "RobinS" <> wrote in message
    > news:...
    >> Henry,
    >>
    >> I have a routine in my base form that adds event handlers for
    >> mouseenter and mouseleave to textboxes. This changes the backcolor
    >> when the user enters the textbox, and changes it back when he leaves.
    >> I learned this from Deborah Kurata book, Doing Objects in VB2005
    >> (just to give credit where credit is due).
    >>
    >> To do this, I cycle through the controls on my forms and
    >> use AddHandler to add the event handlers to each control.
    >>
    >> If I add new controls of that type to the form,
    >> they are automatically handled.
    >>
    >> If I remove controls from the form, that is automatically
    >> handled; I don't need to remove them from any Handles clauses.
    >>
    >> Also, all controls of the same type are handled the same way.
    >>
    >> I actually have this code in a base form, and all of my forms
    >> inherit from it. That way, I have the same behavior on every
    >> form in my application. (As one of my old teachers used to say,
    >> "Right or wrong, be consistent.")
    >>
    >> Here's the code. This is recursive to handle the cases where you
    >> have controls within controls, like textboxes within panels. I
    >> didn't try this out, but it's almost identical to my code that
    >> does the textboxes.
    >>
    >> In Form_Load, add this: AddEventHandlers(me)
    >>
    >> Private Sub AddEventHandlers(ByVal ctrlContainer As Control)
    >> For Each ctrl As Control In ctrlContainer.Controls
    >> If TypeOf ctrl Is Button Then
    >> 'When the MouseHover event is raised for this button,
    >> ' run the Button_Hover routine.
    >> AddHandler ctrl.MouseHover, AddressOf Button_Hover
    >> 'When the MouseLeave event is raised for this button,
    >> ' run the Button_Leave routine.
    >> AddHandler ctrl.MouseLeave, AddressOf Button_Leave
    >> End If
    >> 'if control has children, call this function recursively
    >> If ctrl.HasChildren Then
    >> AddEventHandlers(ctrl)
    >> End If
    >> Next
    >> End Sub
    >>
    >> Public Sub Button_Hover(ByVal sender as Object, _
    >> ByVal e as System.EventArgs)
    >> DirectCast(sender, Control).BackColor = _
    >> Color.BlanchedAlmond
    >> End Sub
    >>
    >> Public Sub Button_Leave(ByVal sender as Object, _
    >> ByVal e as System.EventArgs)
    >> DirectCast(sender, Control).BackColor = _
    >> Color.Transparent
    >> 'Note: you can also change this to one of
    >> ' the known colors, like the color of
    >> ' the buttonface:
    >> 'DirectCast(sender, Control).BackColor = _
    >> ' Color.FromKnownColor(KnownColor.ButtonFace)
    >> End Sub
    >>
    >> What do you think?
    >> Robin S.
    >> ------------------------------------------
    >>
    >> "Henry Jones" <> wrote in message
    >> news:...
    >>>I thought it be cleaner to use one routine that handles many buttons than
    >>>to create more code. Better for maintenance later on. Am I wrong?
    >>> But that isn't the point. I would like to know how to do it, now that I
    >>> have thought of it. I don't know if it's good programming practice, but
    >>> that is what these forums are all about.
    >>>
    >>> Thanks,
    >>>
    >>> Henry
    >>>
    >>> "Cor Ligthert [MVP]" <> wrote in message
    >>> news:%...
    >>>> Henry,
    >>>>
    >>>> I am interested. What makes it that you think nicer to use handles
    >>>> instead of .Net methods?
    >>>>
    >>>> Cor
    >>>>
    >>>> You want to show that you are a starting programmer or something like
    >>>> that?
    >>>> "Henry Jones" <> schreef in bericht
    >>>> news:...
    >>>>>I have a VS 2005 VB.NET project and would like to change the color of
    >>>>>the textbox when the user hovers over it. In a Module I have the
    >>>>>following routines:
    >>>>>
    >>>>> Public Sub Button_Hover(ByRef btnName As Button)
    >>>>>
    >>>>> btnName.BackColor = Color.BlanchedAlmond
    >>>>>
    >>>>> End Sub
    >>>>>
    >>>>> Public Sub Button_Leave(ByRef btnName As Button)
    >>>>>
    >>>>> btnName.BackColor = Color.Transparent
    >>>>>
    >>>>> End Sub
    >>>>>
    >>>>> ----------------------------------------------
    >>>>>
    >>>>>
    >>>>>
    >>>>> I called the routines from the following code:
    >>>>>
    >>>>>
    >>>>>
    >>>>> Private Sub cmdTierCancel_MouseHover(ByVal sender As Object, ByVal e
    >>>>> As System.EventArgs) Handles cmdTierCancel.MouseHover
    >>>>>
    >>>>> Button_Hover(cmdTierCancel)
    >>>>>
    >>>>> End Sub
    >>>>>
    >>>>> Private Sub cmdTierCancel_MouseLeave(ByVal sender As Object, ByVal e
    >>>>> As System.EventArgs) Handles cmdTierCancel.MouseLeave
    >>>>>
    >>>>> Button_Leave(cmdTierCancel)
    >>>>>
    >>>>> End Sub
    >>>>>
    >>>>> ---------------------------------
    >>>>>
    >>>>> SO FAR SO GOOD. I thought it would be nice to use the Handles feature
    >>>>> and call the routine like this:
    >>>>>
    >>>>> ---------------------------------
    >>>>>
    >>>>> Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e
    >>>>> As System.EventArgs) cmd1.MouseHover, cmd2.MouseHover,
    >>>>> cmd3.MouseHover
    >>>>>
    >>>>> Button_Leave(sender)
    >>>>>
    >>>>> End Sub
    >>>>>
    >>>>>
    >>>>>
    >>>>> But this routine doesn't work. Can anyone tell me what I am doing
    >>>>> wrong?
    >>>>>
    >>>>>
    >>>>>
    >>>>> Thanks
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
     
    RobinS, Dec 1, 2006
    #10
  11. "Henry Jones" <> schrieb:
    > Public Sub Button_Hover(ByRef btnName As Button)
    >[...]
    > Public Sub Button_Leave(ByRef btnName As Button)


    'ByRef' => 'ByVal'.

    >
    > btnName.BackColor = Color.Transparent
    >
    > End Sub
    >[...]
    > Public Sub Handles_All_Buttons Handles(ByVal sender As Object, ByVal e As
    > System.EventArgs) cmd1.MouseHover, cmd2.MouseHover, cmd3.MouseHover
    >
    > Button_Leave(sender)
    >
    > But this routine doesn't work. Can anyone tell me what I am doing wrong?


    'Button_Leave(DirectCast(sender, Button))'.

    --
    M S Herfried K. Wagner
    M V P <URL:http://dotnet.mvps.org/>
    V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
     
    Herfried K. Wagner [MVP], Dec 1, 2006
    #11
  12. "Cor Ligthert [MVP]" <> schrieb:
    > I am interested. What makes it that you think nicer to use handles instead
    > of .Net methods?


    I feel sorry, but I do not understand what you are meaning...

    --
    M S Herfried K. Wagner
    M V P <URL:http://dotnet.mvps.org/>
    V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
     
    Herfried K. Wagner [MVP], Dec 1, 2006
    #12
  13. Have a look what Robin wrote, than you understand it.
    There is nothing more for me to add.

    Cor

    "Herfried K. Wagner [MVP]" <> schreef in bericht
    news:%23m4%...
    > "Cor Ligthert [MVP]" <> schrieb:
    >> I am interested. What makes it that you think nicer to use handles
    >> instead of .Net methods?

    >
    > I feel sorry, but I do not understand what you are meaning...
    >
    > --
    > M S Herfried K. Wagner
    > M V P <URL:http://dotnet.mvps.org/>
    > V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
     
    Cor Ligthert [MVP], Dec 1, 2006
    #13
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Daren Hawes
    Replies:
    2
    Views:
    591
    Cor Ligthert
    Jul 27, 2004
  2. Luqman
    Replies:
    2
    Views:
    1,087
    Luqman
    Jan 2, 2006
  3. Henry Jones
    Replies:
    2
    Views:
    402
    RobinS
    Dec 1, 2006
  4. Pieter
    Replies:
    1
    Views:
    258
  5. Rob W
    Replies:
    0
    Views:
    412
    Rob W
    Mar 6, 2009
Loading...

Share This Page