BTW:
Instead of using Reflection
click_event = button.GetType.get_event("Click")
on_click = EventHandler.new { |sender, e| puts "Click!" }
click_event.add_event_handler(button, on_click)
you can do
handler = lambda { |sender, e| puts "Click!" }
button.on_click.add handler
button.on_click.remove handler
or just
button.on_click { |sender, e| puts "Click!" }
if you don't need to remove the handler.
Tomas
From: [email protected]
[mailto:[email protected]] On Behalf Of Jimmy Schementi
Sent: Tuesday, August 04, 2009 12:15 PM
To: [email protected]
Subject: Re: [Ironruby-core] Getting a delegate in IronRuby
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