VB.Net 2005: click handlers

I have two click event handler Subs in a vb.net 2005 desktop application that are exactly the same across many forms, except that they are fired by the Click events of different controls on each form, and they set the text value of a textbox that is differently named in each form.

I didn't want to use a Module.vb file, since that is not object-oriented (right?). Otherwise though, is there any way I can bring these Subs into an external place like a header file that I can include in all the forms I need them in? Right now I am cutting and pasting what seems to be a lot of code and it seems to me I should be able to abstract them into something reusable. but nothing comes to me when I try to figure out how.

'EXAMPLE
'The UpdateScore subroutine below sets a textbox value as the result of checkboxes being checked/unchecked.
'It is exactly the same in 30 different forms in this app, except for
'       1) the multiple click events that fire it: cbExpCfgDmg.Click, etc.
'and 2) the textbox whose value it sets: txtCWMCfg.Text
'-------------------------------------------------------------------
    Friend Sub UpdateScore(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbExpCfgDmg.Click, _
cbMixUXO.Click, cbExpCfgUndmg.Click, cbBulk.Click, cbK941.Click, cbCAIS.Click, cbEvCWM.Click
        If sender.checked = True Then
            If Convert.ToInt32(sender.text) > Convert.ToInt32(txtCWMCfg.Text) Then
                txtCWMCfg.Text = sender.text
            End If
        ElseIf sender.checked = False Then
            Dim cb As CheckBox
            Dim arrCbValues As New ArrayList
            For Each ctrl As Control In gb1.Controls
                If TypeOf ctrl Is CheckBox Then
                    cb = CType(ctrl, CheckBox)
                    If cb.Checked = True Then
                        arrCbValues.Add(Convert.ToInt32(cb.Text))
                    End If
                End If
            Next ctrl
            'find checked boxes
            If arrCbValues.Count > 0 Then
                'if max value in checked boxes is greater than textbox value, replace it
                If FindMax(arrCbValues) >= 0 Then
                    txtCWMCfg.Text = FindMax(arrCbValues)
                End If
            Else
                txtCWMCfg.Text = "0"
            End If
        End If
    End Sub
'-----------------------------------------------------
'END EXAMPLE
LVL 1
k3n51mmAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

DBAduck - Ben MillerPrincipal ConsultantCommented:
I think it would be much simpler to create a Class Library with a class that could be used to do the actions and then in each form that needs the click, you just handle the click and pass the Textbox to the Class library method and it does the changes.  Then you have consistency and can modify the class library (or object) and then each application that you used it in is updated without changing each Click handler.
0
k3n51mmAuthor Commented:
thanks for the response. How would I do that?
0
DBAduck - Ben MillerPrincipal ConsultantCommented:
In Visual Studio you would create a Class Library project and create a class maybe called something like GlobalClickHandler and in it put the method either as a Public Shared Function or Sub and have parameters of a TextBox that gets the value of it Set and then a parameter of the Sender (maybe it is a Button or whatever it is).

Something like:
Public Shared Function HandleClick(ByVal pButton as System.Web...Button, ByRef pTextbox as System.Web....TextBox)
   ' In this function you would do the same thing that you do but now you pass in the button and the Textbox and you set the value of the textbox, etc.

End Function

Now you have the Class GlobalClickHandler with a method of HandleClick( )

Inside your project that will use this, you would have a reference to it and the Import it with an Imports statement.

Now in the Project, your Buttons will have a Click handler and in it you will reference it this way:

GlobalClickHandler.HandleClick(button, ByRef txtCWMCfg) ' or however you call it or whatever the name is, but this would have the same code but would use and set the values of the parameter objects.

Make sense?
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.