Code Examples
IronRuby makes it relatively easy to work with Windows Forms. This short program creates a simple form with two buttons. Clicking the first button creates a second modal dialog that the user must close before continuing. Here's the code:
# Load the .NET windowing assemblies
require 'System.Windows.Forms'
require 'System.Drawing'
# Define some aliases
Forms = System::Windows::Forms
Point = System::Drawing::Point
Size = System::Drawing::Size
# Create a windows form instance
frm = Forms::Form.new
frm.Text = 'IronRuby Demo'
frm.Size = Size.new 200,75
# Create a popup button
popup = Forms::Button.new
popup.Text = 'Clickee Mee'
popup.location = Point.new 10,10
popup.click { |sender, args|
Forms::MessageBox.show 'You click-ed me!' }
frm.Controls.Add popup
# Create an exit button
exitBtn = Forms::Button.new
exitBtn.Text = 'Close'
# The "MouseUp" is a hack to work around a pre-alpha bug
# that makes buttons use the first handler created
exitBtn.MouseUp { |sender, args| frm.close }
exitBtn.location = Point.new 100,10
frm.Controls.Add exitBtn
# And run our application
frm.showDialog
Using a version of IronRuby built with the 3.5 version of the .NET framework gives you access to the WPF code base, which This opens up a number of new possibilities for building user interface (UI) code, such as the interesting challenge of building applications that you can target to either the web or the traditional desktop.
This next code example shows how you can create applications that use Microsoft's Windows Presentation Foundation (WPF) for the UI and use Ruby to drive the logic. Unfortunately, in the current version you can't load an external XAML file for the UI.
# load wpf
require 'wpf'
# Create window
window = System::Windows::Window.new
window.title = 'WPF demo in IronRuby'
window.height = 100
panel = System::Windows::Controls::StackPanel.new
panel.margin = System::Windows::Thickness.new 10
panel.height = 100
window.content = panel
# create our button
btn = Ststem::Windows::Controls::Button.new
btn.content = 'Click Me!'
btn.font_size = 24
panel.children.add btn
# add a nice looking drop shadow
btn.bitmap_effect =
System::Windows::Media::Effects::DropShadowBitmapEffect.new
# the number of times the button has been pressed
clicked = 0
btn.click do |sender, args|
# cycle between Hello and World until the 5th click and then..
if clicked > 3
btn.content = 'Annoyed Yet?'
else
if btn.content == 'Hello'
btn.content = 'World'
else
btn.content = 'Hello'
end
clicked += 1
end
end
# run the application
app = System::Windows::Application.new
app.run window
Bottom Line
While IronRuby shows promise, it's still definitely a work in progress. IronRuby lacks the same level of support as JRuby, which supports Ruby on Rails and makes it possible to build a RoR application that will run on a J2EE server. IronRuby has no direct RoR support at this time.
While you're probably not going to build a complex program with the current tools, you can get started with the Ruby language and .NET. Tools like DLR Pad can help you test the interaction between the Ruby language and XAML for building next-generation user interfaces. You can get more information from the
IronRuby discussion forum.