2009-11-30 4 views
1

IronRuby 스크립트를 통해 XAML의 UI 요소에 이벤트 처리기를 추가하는 가장 간단하고 간결한 방법은 무엇입니까? 가정 : 이벤트 처리기를 추가하는 코드는 IronRuby 스크립트에 기록되며 이벤트를 처리하는 코드는 동일한 IronRuby 스크립트에 포함됩니다.IronRuby 및 XAML UI 이벤트 처리

다음 코드와 동일하지만 IronRuby를 사용하고 싶습니다. 간단한 button1 클릭 이벤트 처리.

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
     button1.Click += new RoutedEventHandler(button1_Click); 
    } 

    void button1_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("Hello World!"); 
    } 
} 

답변

2

내가 아는 한, .NET 이벤트는 IronRuby에서 블록을 사용하는 메서드로 표시됩니다. 그래서, 당신은 쓸 수 있습니다 :

button1.click do |sender, args| 
    MessageBox.show("Hello World!") 
end 

This 다른 옵션에 대해 설명합니다.

+0

+1. 이것은 내 요구의 대부분을 처리 할 것입니다. 귀하의 링크에 .remove 구문이 표시됩니다. 이는 여러 핸들러를 추가하기위한 일종의 ".add"구문을 지원하는지, 아니면 여러 번 호출되는 동일한 클릭 (&) 구문일까요? – BuddyJoe

+0

이 예제에서는이 시퀀스를 사용합니다 :'button.click (& ​​on_click); button.click.remove (on_click)' –

+0

다른 인수 (또는 같은 인수)를 사용하여'click '을 여러 번 호출하면 C# 에서처럼 여러 핸들러가 등록된다는 것을 의미한다고 생각합니다. –

1

귀하가 더 이해할 수있는 경우 추가를 사용하여 이벤트를 구독 할 수도 있습니다.

p = Proc.new do |sender, args| 
    MessageBox.show("Hello World!") 
end 

# Subscribe 
button1.click.add p 

# Unsubscribe 
button1.click.remove p 
+0

멋진 방법입니다. +1 – BuddyJoe

+0

"button1.click.add method (: foo)", 메소드에서 "Proc"객체를 가져올 수 있습니다. foo는 메소드 이름입니다. –