Forum: IronRuby WPF: registering a routed event

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
48d1aca7191f2d16e184971054c7c143?d=identicon&s=25 Meinrad Recheis (Guest)
on 2009-02-09 00:46
(Received via mailing list)
Hi all,

I seem to step in every hole there is on my IronRuby test drive. Using
the
latest git head I am failing to register a button click event in WPF:

>>> require "WindowsBase, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require "PresentationCore, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require 'PresentationFramework, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35'
=> true
>>> b = System::Windows::Controls::Button.new
=> #<System::Windows::Controls::Button:0x0000064>
>>> def on_click o, args
... puts "clicked!!"
... end
=> nil
>>> b.add_Click( method(:on_click))
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)
>>> h=System::Windows::RoutedEventHandler.new{|o, args| puts "clicked!!" }
=> #<System::Windows::RoutedEventHandler:0x000006a>
>>> h.Invoke(nil, nil)
clicked!!
=> nil
>>> b.add_Click(h)
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)



Actually I would have expected b.add_Click( method(:on_click))
or b.add_Click( lambda {|o, args| ... } ) to work, just like it does in
IronPython:


>>> clr.AddReference( 'WindowsBase')
>>> clr.AddReference( 'PresentationCore')
>>> clr.AddReference( 'PresentationFramework')
>>> import System
>>> from System import Windows
>>> from System.Windows import Controls
>>> from System.Windows.Controls import *
>>> b= Button()
>>> def on_click(o, args):
...   print "clicked!!"
...
>>> b.add_Click(on_click)
>>>


I hope, I am not starting to annoy you guys ;)
-- henon
Cb51033949ffccd982ae32c9f890f25a?d=identicon&s=25 Tomas Matousek (Guest)
on 2009-02-09 01:29
(Received via mailing list)
b.click { puts "clicked!!" }

should do. We are going to enable more ways how to hook event handlers.

Tomas

From: ironruby-core-bounces@rubyforge.org
[mailto:ironruby-core-bounces@rubyforge.org] On Behalf Of Meinrad
Recheis
Sent: Sunday, February 08, 2009 3:46 PM
To: ironruby-core
Subject: [Ironruby-core] WPF: registering a routed event

Hi all,

I seem to step in every hole there is on my IronRuby test drive. Using
the latest git head I am failing to register a button click event in
WPF:
>>> require "WindowsBase, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require "PresentationCore, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require 'PresentationFramework, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35'
=> true
>>> b = System::Windows::Controls::Button.new
=> #<System::Windows::Controls::Button:0x0000064>
>>> def on_click o, args
... puts "clicked!!"
... end
=> nil
>>> b.add_Click( method(:on_click))
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)
>>> h=System::Windows::RoutedEventHandler.new{|o, args| puts "clicked!!" }
=> #<System::Windows::RoutedEventHandler:0x000006a>
>>> h.Invoke(nil, nil)
clicked!!
=> nil
>>> b.add_Click(h)
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)


Actually I would have expected b.add_Click( method(:on_click)) or
b.add_Click( lambda {|o, args| ... } ) to work, just like it does in
IronPython:


>>> clr.AddReference( 'WindowsBase')
>>> clr.AddReference( 'PresentationCore')
>>> clr.AddReference( 'PresentationFramework')
>>> import System
>>> from System import Windows
>>> from System.Windows import Controls
>>> from System.Windows.Controls import *
>>> b= Button()
>>> def on_click(o, args):
...   print "clicked!!"
...
>>> b.add_Click(on_click)
>>>

I hope, I am not starting to annoy you guys ;)
-- henon
E1deaac6561498a0e7472e6268ea9ccc?d=identicon&s=25 Jimmy Schementi (Guest)
on 2009-02-10 03:50
(Received via mailing list)
We only have blocks/lambda->event handlers working. Passing a method
handle is on the list, but not done yet. Feel free to post a bug on
RubyForge to make sure we get around to it.
http://rubyforge.org/tracker/?func=add&group_id=43...

~js

From: ironruby-core-bounces@rubyforge.org
[mailto:ironruby-core-bounces@rubyforge.org] On Behalf Of Meinrad
Recheis
Sent: Sunday, February 08, 2009 3:46 PM
To: ironruby-core
Subject: [Ironruby-core] WPF: registering a routed event

Hi all,

I seem to step in every hole there is on my IronRuby test drive. Using
the latest git head I am failing to register a button click event in
WPF:
>>> require "WindowsBase, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require "PresentationCore, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require 'PresentationFramework, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35'
=> true
>>> b = System::Windows::Controls::Button.new
=> #<System::Windows::Controls::Button:0x0000064>
>>> def on_click o, args
... puts "clicked!!"
... end
=> nil
>>> b.add_Click( method(:on_click))
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)
>>> h=System::Windows::RoutedEventHandler.new{|o, args| puts "clicked!!" }
=> #<System::Windows::RoutedEventHandler:0x000006a>
>>> h.Invoke(nil, nil)
clicked!!
=> nil
>>> b.add_Click(h)
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)


Actually I would have expected b.add_Click( method(:on_click)) or
b.add_Click( lambda {|o, args| ... } ) to work, just like it does in
IronPython:


>>> clr.AddReference( 'WindowsBase')
>>> clr.AddReference( 'PresentationCore')
>>> clr.AddReference( 'PresentationFramework')
>>> import System
>>> from System import Windows
>>> from System.Windows import Controls
>>> from System.Windows.Controls import *
>>> b= Button()
>>> def on_click(o, args):
...   print "clicked!!"
...
>>> b.add_Click(on_click)
>>>

I hope, I am not starting to annoy you guys ;)
-- henon
E1deaac6561498a0e7472e6268ea9ccc?d=identicon&s=25 Jimmy Schementi (Guest)
on 2009-02-25 20:03
(Received via mailing list)
FYI, Tomas's latest patch (http://www.ruby-forum.com/topic/179668)
expands IronRuby's .NET event support to:

def handler a,b
    puts ""handler: #{a} #{b}""
end

c = C.new

# using a block:
h = c.on_foo { |a,b| ... }
c.on_foo.remove(h)

# using a method object:
h = method(:handler)
c.on_foo.add(h)
c.on_foo.remove(h)

~js

From: ironruby-core-bounces@rubyforge.org
[mailto:ironruby-core-bounces@rubyforge.org] On Behalf Of Jimmy
Schementi
Sent: Monday, February 09, 2009 6:28 PM
To: ironruby-core@rubyforge.org
Subject: Re: [Ironruby-core] WPF: registering a routed event

We only have blocks/lambda->event handlers working. Passing a method
handle is on the list, but not done yet. Feel free to post a bug on
RubyForge to make sure we get around to it.
http://rubyforge.org/tracker/?func=add&group_id=43...

~js

From: ironruby-core-bounces@rubyforge.org
[mailto:ironruby-core-bounces@rubyforge.org] On Behalf Of Meinrad
Recheis
Sent: Sunday, February 08, 2009 3:46 PM
To: ironruby-core
Subject: [Ironruby-core] WPF: registering a routed event

Hi all,

I seem to step in every hole there is on my IronRuby test drive. Using
the latest git head I am failing to register a button click event in
WPF:
>>> require "WindowsBase, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require "PresentationCore, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35"
=> true
>>> require 'PresentationFramework, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35'
=> true
>>> b = System::Windows::Controls::Button.new
=> #<System::Windows::Controls::Button:0x0000064>
>>> def on_click o, args
... puts "clicked!!"
... end
=> nil
>>> b.add_Click( method(:on_click))
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)
>>> h=System::Windows::RoutedEventHandler.new{|o, args| puts "clicked!!" }
=> #<System::Windows::RoutedEventHandler:0x000006a>
>>> h.Invoke(nil, nil)
clicked!!
=> nil
>>> b.add_Click(h)
:0: can't convert Method into System::Windows::RoutedEventHandler
(TypeError)


Actually I would have expected b.add_Click( method(:on_click)) or
b.add_Click( lambda {|o, args| ... } ) to work, just like it does in
IronPython:


>>> clr.AddReference( 'WindowsBase')
>>> clr.AddReference( 'PresentationCore')
>>> clr.AddReference( 'PresentationFramework')
>>> import System
>>> from System import Windows
>>> from System.Windows import Controls
>>> from System.Windows.Controls import *
>>> b= Button()
>>> def on_click(o, args):
...   print "clicked!!"
...
>>> b.add_Click(on_click)
>>>
I hope, I am not starting to annoy you guys ;)
-- henon
This topic is locked and can not be replied to.