Balachandran
Balachandran

Reputation: 87

How to get event name in vb.net?

Here there are two handlers in a particular procedure then how to get which event handler has performed.

for example

Private Sub TextBox1_Events(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles TextBox1.TextChanged, TextBox1.GotFocus

End Sub

how to get which event has occured.

Upvotes: 3

Views: 3557

Answers (4)

Ando
Ando

Reputation: 11409

Since you are dealing with 2 events (similar in signature) emitted by the same control the easiest/cleanest way of solving this would be 2 separate event handlers (as suggested by Merlyn Morgan-Graham):

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles TextBox1.TextChanged
        'the TextChanged specific code would go here
        HandletTextBox1EventInternal(sender, e)
    End Sub 

    Private Sub TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles TextBox1.GotFocus
        'the GotFocus specific code would go here
        HandletTextBox1EventInternal(sender, e)
    End Sub

    Private Sub HandleTextBox1EventInternal(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'code common to GotFocus and TextChanged handlers
    End sub

Upvotes: 1

pingoo
pingoo

Reputation: 2064

It is possible using the StackTrace (could be a better way I'm not sure...). Try the following code.

 Private Sub TextBox1_Events(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox1.GotFocus

        Dim s As New StackTrace(True)

        For Each f As StackFrame In s.GetFrames
            Debug.WriteLine(f.GetMethod.Name)
        Next

    End Sub

When the text box gets focus the following is written:

TextBox1_Events

OnGotFocus

OnGotFocus

WmSetFocus

Ect…….

Where as when it’s a text changed event

TextBox1_Events

OnTextChanged

OnTextChanged

Ect….

I’m sure you could write something using this to do what you need. But i fully agree with the other guys separate handlers is better.

Upvotes: 3

Merlyn Morgan-Graham
Merlyn Morgan-Graham

Reputation: 59111

In this case, you cannot.

  • If the events were bound to two separate controls, you could check the sender property for the type
  • If the e argument for the event had some type other than EventArgs (some events use a different arguments type), or the control passed some type derived from EventArgs, then you might be able to check properties on that variable

There aren't any other tricks you could use because events don't provide any sort of data to the handler specifying which event occurred.

With these two events, they're both going to be sent from the same text box, so the first option is out. Also, with both events, they send just an instance of the EventArgs class (not a derived class), so that option is out.

Ultimately, you're going to have to have multiple event handlers to solve this specific problem.

Upvotes: 2

Ry-
Ry-

Reputation: 224903

It's not possible. If you're in a situation where you need to know which event occurred, you will always be better off using two separate handlers.

Upvotes: 1

Related Questions