VB.Net 2005: click handlers

Posted on 2007-03-29
Medium Priority
Last Modified: 2013-11-26
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.

'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
                    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
                txtCWMCfg.Text = "0"
            End If
        End If
    End Sub
Question by:k3n51mm
  • 2
LVL 25

Expert Comment

by:DBAduck - Ben Miller
ID: 18821513
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.

Author Comment

ID: 18826387
thanks for the response. How would I do that?
LVL 25

Accepted Solution

DBAduck - Ben Miller earned 2000 total points
ID: 18826800
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?

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
The PowerShell Core 6.0 of .NET release is just the beginning. The upcoming PowerShell Core 6.1 would have artificial intelligence and internet of things capabilities. So many things to look forward to in the upcoming release.
The video will let you know the exact process to import OST/PST files to the cloud based Office 365 mailboxes. Using Kernel Import PST to Office 365 tool, one can quickly import numerous OST/PST files to Office 365. Besides this, the tool also comes…
Watch the video to know how one can repair corrupt Exchange OST file effortlessly and convert OST emails to MS Outlook PST file format by using Kernel for OST to PST converter tool. It can convert OST to MSG, MBOX, EML to access them. It can migrate…

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question