I believe that commit is the one that didn't get into the binary build of 
0.9.0, but is (strange enough) tagged with 0.9 in GitHub. Thanks for pointing 
that out though.

From: [email protected] 
[mailto:[email protected]] On Behalf Of Martin Smith
Sent: Tuesday, August 04, 2009 12:05 PM
To: [email protected]
Subject: Re: [Ironruby-core] Getting a delegate in IronRuby

Thank you all for your suggestions. They've been most helpful. I think i've 
mostly wrapped my head around event handlers.  Here's one last question.  
What's the best way to test if a given object is an event?  Obviously the way 
below: (object.GetType.get_event("EventName") != nil) is one way, but is there 
a more efficient (more rubonic) way?

I've tried:

button = Button.new
button.click # => IronRuby.Builtins.RubyEvent
# I cant test against IronRuby::Builtins::RubyEvent, because it's not defined
button.click.is_a?(System::EventHandler)
# error, about TypeGroups
button.click.is_a?(System::EventHandler[]) # false

As an aside, I looked at the changelog for, 0.9.0 and saw this:

       2) Implements TypeGroup#[] overload taking a Fixnum. This is useful when 
one


                 needs to select a generic type definition out of a group of 
types. For example,
                       given three classes C:

                      public class C {
                        public virtual int Arity { get { return 0; } }
                      }
                      public class C<T> {


                        public virtual int Arity { get { return 1; } }
                      }
                      public class C<T,S> {
                        public virtual int Arity { get { return 2; } }
                      }

                      p C[0]  # => C
                      p C[1]  # => C[T]
                      p C[2]  # => C[T, S]


However, this fails:

System::EventHandler[0] # invalid value for class: 0

You guys have been super helpful.  It's really great to see such an active and 
great community forming around IronRuby.

Thanks,
Martin

On Mon, Aug 3, 2009 at 6:52 PM, Ray Vernagus 
<[email protected]<mailto:[email protected]>> wrote:
** I tried sending this much earlier but my message didn't go through **

Hi, Martin--

Here's a short example that might illustrate what you're trying to accomplish:

require "System.Windows.Forms"
include System
include System::Windows::Forms

button = Button.new

click_event = button.GetType.get_event("Click")

on_click = EventHandler.new { |sender, e| puts "Click!" }

click_event.add_event_handler(button, on_click)

button.perform_click # Click!

click_event.remove_event_handler(button, on_click)

button.perform_click

More canonical examples of using events in IronRuby are found here: 
http://www.ironruby.net/Documentation/.NET/Events

--Ray
On Mon, Aug 3, 2009 at 2:46 PM, Martin Smith 
<[email protected]<mailto:[email protected]>> wrote:
Hello,

I was wondering how I can get a delegate in IronRuby.

One thing I was thinking about doing was trying to attach an event handler with 
an EventInfo and it requires a delegate.  It has a method called 
AddEventHandler(object, Delegate), and i wanted to attach an event handler.

But I can't find any way to get a delegate in ruby.  How would you guys do it?

I know i can also use:

object.send(event_name) { |*e| ...... }

In that case how would i remove that event handler?

Thanks in advance,
Martin
_______________________________________________
Ironruby-core mailing list
[email protected]<mailto:[email protected]>
http://rubyforge.org/mailman/listinfo/ironruby-core


_______________________________________________
Ironruby-core mailing list
[email protected]<mailto:[email protected]>
http://rubyforge.org/mailman/listinfo/ironruby-core

_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to