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 <r.verna...@gmail.com> 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 <martin.smith...@gmail.com>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
>> Ironruby-core@rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core@rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to