471,330 Members | 1,639 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,330 software developers and data experts.

Need to extract the Click event from tsMenuItem.Events

newItem and tsMenuItem are ToolStripMenuItems.

I'd like to add the click event in tsMenuItem to newItem.

Can't do this because Events is Protected:

newItem.Events.AddHandlers(tsMenuItem.Events);

Can't do this because Click must be on the left side:

newItem.Click += tsMenuItem.Click;

Is there some way I can extract the Click event from tsMenuItem.Events so
that I can do this:

newItem.Click += ??

Thanks in advance
Apr 1 '08 #1
11 1304
On Tue, 01 Apr 2008 12:26:42 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
newItem and tsMenuItem are ToolStripMenuItems.

I'd like to add the click event in tsMenuItem to newItem.
So you want the tsMenuItem.Click event handlers to be called in response
to a Click event on newItem?

What about this:

newItem.Click += delegate(object sender, EventArgs e)
{ tsMenuItem.PerformClick(); };

Pete
Apr 1 '08 #2
Well, now I have my collection of code that doesn't work and your statement
that does.

I'm quite new to C#. Could you add a few words about the syntax and how it
works.

I not sure if you are defining a Delagate or declaring one.
Thanks very much
"Peter Duniho" <Np*********@nnowslpianmk.comwrote in message
news:op***************@petes-computer.local...
On Tue, 01 Apr 2008 12:26:42 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
newItem and tsMenuItem are ToolStripMenuItems.

I'd like to add the click event in tsMenuItem to newItem.
So you want the tsMenuItem.Click event handlers to be called in response
to a Click event on newItem?

What about this:

newItem.Click += delegate(object sender, EventArgs e)
{ tsMenuItem.PerformClick(); };

Pete
Apr 1 '08 #3
On Tue, 01 Apr 2008 15:04:35 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
Well, now I have my collection of code that doesn't work and your
statement
that does.

I'm quite new to C#. Could you add a few words about the syntax and how
it
works.

I not sure if you are defining a Delagate or declaring one.
Sure. It seems to me that the terms "defining" and "declaring" are not
sufficiently unambiguous. However, in this case the delegate type is
already defined (it's the type used by the Click event, which is
EventHandler), and you are declaring an anonymous method to be used to
create the delegate instance added to the Click event.

As the name suggests, it's basically a method without a name. You could
do the exact same thing by writing a named method that calls
"tsMenuItem.PerformClick()", and adding that named to the event instead.
For example, a method like this:

void ClickRedirect(object sender, EventArgs e)
{
tsMenuItem.PerformClick();
}

and then elsewhere a line of code that looks like:

newItem.Click += ClickRedirect;

Using the anonymous method allows the code to be more self-contained IMHO,
but otherwise it's more a matter of preference, at least in this
particular situation.

Pete
Apr 1 '08 #4

The trouble I'm having is that if I look at the methods and constructors I
can't find one that fits:
newItem.Click += delegate(object sender, EventArgs e)
{ tsMenuItem.PerformClick(); };

Thanks again

"Peter Duniho" <Np*********@nnowslpianmk.comwrote in message
news:op***************@petes-computer.local...
On Tue, 01 Apr 2008 15:04:35 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
Well, now I have my collection of code that doesn't work and your
statement
that does.

I'm quite new to C#. Could you add a few words about the syntax and how
it
works.

I not sure if you are defining a Delagate or declaring one.
Sure. It seems to me that the terms "defining" and "declaring" are not
sufficiently unambiguous. However, in this case the delegate type is
already defined (it's the type used by the Click event, which is
EventHandler), and you are declaring an anonymous method to be used to
create the delegate instance added to the Click event.

As the name suggests, it's basically a method without a name. You could
do the exact same thing by writing a named method that calls
"tsMenuItem.PerformClick()", and adding that named to the event instead.
For example, a method like this:

void ClickRedirect(object sender, EventArgs e)
{
tsMenuItem.PerformClick();
}

and then elsewhere a line of code that looks like:

newItem.Click += ClickRedirect;

Using the anonymous method allows the code to be more self-contained IMHO,
but otherwise it's more a matter of preference, at least in this
particular situation.

Pete
Apr 2 '08 #5
(my apologies for the late reply...I only just now noticed that this
message, along with five others, somehow got stuck in my Outbox)

On Wed, 02 Apr 2008 05:19:58 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
The trouble I'm having is that if I look at the methods and constructors
I
can't find one that fits:
newItem.Click += delegate(object sender, EventArgs e)
{ tsMenuItem.PerformClick(); };
I don't know what that means. Are you trying to find a method or
constructor named "delegate"? If so, you're right...you're not going to
find it.

The word "delegate" is a C# keyword. In one context, it is used to
declare a new delegate type. But in the above context, it's used to
declare an anonymous method. By definition, the anonymous method has no
name and so you won't find it listed in any list of methods.

Pete
Apr 9 '08 #6
I understand: anonymous method

I would like to read about the statement
delegate(object sender, EventArgs e) { tsMenuItem.PerformClick(); };

I can see it doesn't fit the format of a declaration (which you verify
below)
Nor that of a Delegate Constructor

You see what I mean? I look at MSDN library and can't find a format that
fits your construction.
Thanks


"Peter Duniho" <Np*********@nnowslpianmk.comwrote in message
news:op***************@petes-computer.local...
(my apologies for the late reply...I only just now noticed that this
message, along with five others, somehow got stuck in my Outbox)

On Wed, 02 Apr 2008 05:19:58 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
The trouble I'm having is that if I look at the methods and constructors
I
can't find one that fits:
newItem.Click += delegate(object sender, EventArgs e)
{ tsMenuItem.PerformClick(); };
I don't know what that means. Are you trying to find a method or
constructor named "delegate"? If so, you're right...you're not going to
find it.

The word "delegate" is a C# keyword. In one context, it is used to
declare a new delegate type. But in the above context, it's used to
declare an anonymous method. By definition, the anonymous method has no
name and so you won't find it listed in any list of methods.

Pete
Jun 27 '08 #7
On Sat, 12 Apr 2008 01:39:58 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
I understand: anonymous method
Are you sure? :)
I would like to read about the statement
delegate(object sender, EventArgs e) { tsMenuItem.PerformClick(); };

I can see it doesn't fit the format of a declaration (which you verify
below)
Nor that of a Delegate Constructor
I don't see how you can understand "anonymous method" but not understand
the expression you're asking about. I can only conclude that you're
mistaken about understanding "anonymous method". So, I'll recommend that
you read this page:
http://msdn2.microsoft.com/en-us/library/0yw3tz5k.aspx

And as well, look around in related sections. The above page is the
section on anonymous methods from the C# Programming Guide. The very
first code example on that page is basically the same as what I posted.

Pete
Jun 27 '08 #8

"Peter Duniho" <Np*********@nnowslpianmk.comwrote in message
news:op***************@petes-computer.local...
On Sat, 12 Apr 2008 01:39:58 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
>I understand: anonymous method

Are you sure? :)
No, but I thought that if Foo was a function that returned a string
"anonymous" would apply if I wrote
Console.Writeline(Foo);
Is that not true?

Anyway, I appreciate the pointer to the site.
That explained a lot.
thanks

>
>I would like to read about the statement
delegate(object sender, EventArgs e) { tsMenuItem.PerformClick(); };

I can see it doesn't fit the format of a declaration (which you verify
below)
Nor that of a Delegate Constructor

I don't see how you can understand "anonymous method" but not understand
the expression you're asking about. I can only conclude that you're
mistaken about understanding "anonymous method". So, I'll recommend that
you read this page:
http://msdn2.microsoft.com/en-us/library/0yw3tz5k.aspx

And as well, look around in related sections. The above page is the
section on anonymous methods from the C# Programming Guide. The very
first code example on that page is basically the same as what I posted.

Pete

Jun 27 '08 #9
On Sat, 12 Apr 2008 16:45:14 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
No, but I thought that if Foo was a function that returned a string
"anonymous" would apply if I wrote
Console.Writeline(Foo);
Is that not true?
That's not true. Ignoring for the moment that if Foo is a function (i.e.
"method"), writing "Console.WriteLine(Foo);" doesn't make sense... The
method "Foo" has a name. Something with a name isn't anonymous, by
definition.

An anonymous method is a method without a name. You create one using the
"delegate" key word, as shown in my code example and as shown in the
documentation to which I refer you.
Anyway, I appreciate the pointer to the site.
That explained a lot.
Glad it helped. :)

Pete
Jun 27 '08 #10

"Peter Duniho" <Np*********@nnowslpianmk.comwrote in message
news:op***************@petes-computer.local...
On Sat, 12 Apr 2008 16:45:14 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
>No, but I thought that if Foo was a function that returned a string
"anonymous" would apply if I wrote
Console.Writeline(Foo);
Is that not true?

That's not true. Ignoring for the moment that if Foo is a function (i.e.
"method"), writing "Console.WriteLine(Foo);" doesn't make sense... The
method "Foo" has a name. Something with a name isn't anonymous, by
definition.
But the string variable does not have a name.

Thanks for all the help

>
An anonymous method is a method without a name. You create one using the
"delegate" key word, as shown in my code example and as shown in the
documentation to which I refer you.
>Anyway, I appreciate the pointer to the site.
That explained a lot.

Glad it helped. :)

Pete

Jun 27 '08 #11

"AAaron123" <aa*******@roadrunner.comwrote in message
news:eC**************@TK2MSFTNGP04.phx.gbl...
>
"Peter Duniho" <Np*********@nnowslpianmk.comwrote in message
news:op***************@petes-computer.local...
>On Sat, 12 Apr 2008 16:45:14 -0700, AAaron123 <aa*******@roadrunner.com>
wrote:
>>No, but I thought that if Foo was a function that returned a string
"anonymous" would apply if I wrote
Console.Writeline(Foo);
Is that not true?

That's not true. Ignoring for the moment that if Foo is a function (i.e.
"method"), writing "Console.WriteLine(Foo);" doesn't make sense... The
method "Foo" has a name. Something with a name isn't anonymous, by
definition.

But the string variable does not have a name.
I just had ocassion to read what I said.
I do see the difference between the function return being anonomyous and the
body being anonomous.
Thanks again
>
Thanks for all the help

>>
An anonymous method is a method without a name. You create one using the
"delegate" key word, as shown in my code example and as shown in the
documentation to which I refer you.
>>Anyway, I appreciate the pointer to the site.
That explained a lot.

Glad it helped. :)

Pete


Jun 27 '08 #12

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Paolo Mancini | last post: by
8 posts views Thread by Tim Geiges | last post: by
4 posts views Thread by Rochdi | last post: by
reply views Thread by Demetri | last post: by
1 post views Thread by andy.hume | last post: by
11 posts views Thread by darrel | last post: by
4 posts views Thread by SpreadTooThin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.