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: ironruby-core-boun...@rubyforge.org [mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Jimmy Schementi Sent: Tuesday, August 04, 2009 12:15 PM To: ironruby-core@rubyforge.org 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: ironruby-core-boun...@rubyforge.org [mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Martin Smith Sent: Tuesday, August 04, 2009 12:05 PM To: ironruby-core@rubyforge.org 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 <r.verna...@gmail.com<mailto: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<mailto: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<mailto:Ironruby-core@rubyforge.org> http://rubyforge.org/mailman/listinfo/ironruby-core _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org<mailto: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