WPF: registering a routed event


#1

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 :wink:
– henon


#2

b.click { puts “clicked!!” }

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

Tomas

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] 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 :wink:
– henon


#3

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: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] On Behalf Of Jimmy
Schementi
Sent: Monday, February 09, 2009 6:28 PM
To: removed_email_address@domain.invalid
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=4359&atid=16798

~js

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] 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 :wink:
– henon


#4

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=4359&atid=16798

~js

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] 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 :wink:
– henon