[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 847
  • Last Modified:

VS 2005 - C# Event

Has anyone experienced this?
When a control (say a button) is moved (cut) to another container
(say a panel)(paste), the event originally assigned is gone. I have
to go to its property and manually re-assign again for it to work.

To overcome this problem , I have tried to assign the event programmatically
but the event will be fired more than once if it has already been assigned
using the designer.

Can I programatically check if the event has been assigned in the first place?

Thanks.
0
michellechan57
Asked:
michellechan57
  • 3
  • 2
  • 2
  • +1
1 Solution
 
AlexFMCommented:
You can remove existing event handler before adding new one:

button1.Click -= new EventHandler(this.button1_Click);
button1.Click += new EventHandler(this.button1_Click);

This doesn't fail also if currently there is no association.
0
 
Fahad MukhtarDistinguished EngineerCommented:
if (button1.Click ==null)
button1.Click += new EventHandler(this.button1_Click);
0
 
michellechan57Author Commented:
Hi Desp,
Received following error message:

The event 'System.Windows.Forms.Control.Click' can only appear on the left hand side of += or -=C:\WindowsApplication2\Source.cs      32      25      MyApp

0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
Seraph_78Commented:
Create a method as follows:

        public void AddEventHandler(EventHandler handler)
        {
            if (Event != null)
            {
                bool addHandler = true;
                Delegate[] d = Event.GetInvocationList();

                foreach (Delegate de in d)
                {
                    if (handler.Target == de.Target)
                    {
                        addHandler = false;
                        break;
                    }
                }
                if (addHandler)
                {
                    Event += handler;
                }
            }
            else
            {
               Event += handler;
            }
        }

That way you will ensure that the handler will only get added if it hasnt been added already.

Hope that helps.
0
 
michellechan57Author Commented:
Hi Seraph_78,

Where is Event declared and declared as what type?

If its button1.Click event then I probably will have the same error
message mentioned in the previous comment.

Thanks.
0
 
Seraph_78Commented:
Event is just name for an event.  So yes button1.Click.
The code ensures that you dont attach the same handler more than once.

If you are getting the error mentioned before are you sure you are attaching the handler to the event and not somehow having the event on the right hand side of the asignment.
0
 
michellechan57Author Commented:
Hi,

The compiler error message occurred at the statement when I test if the event is null.
It occurred before any assignment of handler.
It says the "event" can only appear on the left of  either += or -=.

Am I missing something here or I have misunderstood some important point?
Please help. Thanks.
0
 
AlexFMCommented:
Any chance that you will try my solution, wich both compiles and works?
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 3
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now