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]> 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]>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]
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>
> _______________________________________________
> Ironruby-core mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core