执行代码后,避免Ironruby自行终止

时间:2014-04-03 13:24:14

标签: ironruby

我已经为Ironruby编写了一段非常非常简单的代码来检查,如果一切正常的话:

require "System.Windows.Forms"
include System::Windows::Forms
form = Form.new
form.Show

当我直接在交互式Ironruby控制台中输入此代码时,它可以正常工作,但是当我将这段代码保存在 test.rb 文件中并通过以下方式执行ir test.rb时命令提示符,Windows窗体在整个代码执行后立即弹出和关闭。 有没有办法避免这种行为?我尝试使用获取,但随后控制台正在等待输入,而表单被冻结。

1 个答案:

答案 0 :(得分:0)

是。简单的答案就是将form.Show更改为Application.Run form

代码完成后窗口立即关闭的原因需要了解模态窗口与无模式窗口。以下是进一步阅读的链接:Displaying Modal and Modeless Windows Forms

此处还有一个混合模态和无模式的例子:

require 'System.Drawing'
include System::Drawing
require 'System.Windows.Forms'
include System::Windows::Forms

class Dlg <Form
    def initialize
        self.Text = 'Modal'
        self.Load do
            self.FormBorderStyle = FormBorderStyle.FixedDialog

            showHide = Button.new
            showHide.Text = 'Show'
            self.Controls.Add(showHide)
            showHide.Click do
                if @modeless.nil?
                    @modeless = Form.new
                    @modeless.StartPosition = FormStartPosition.CenterScreen
                    @modeless.Text = 'Modeless'
                    @modeless.FormClosing { @modeless = nil; showHide.Text = 'Show' }
                end
                if @modeless.Visible
                    @modeless.Hide # hide a modeless form
                    showHide.Text = 'Show'
                else
                    @modeless.Show # show a modeless form
                    showHide.Text = 'Hide'
                end
            end

            ok = Button.new
            ok.DialogResult = DialogResult.OK
            ok.Text = 'OK'
            ok.Location = Point.new(0, showHide.Bottom+10)
            self.Controls.Add(ok)

            cancel = Button.new
            cancel.DialogResult = DialogResult.Cancel
            cancel.Text = 'Cancel'
            cancel.Location = Point.new(ok.Right+10, ok.Top)
            self.Controls.Add(cancel)
        end
    end
end

dlg = Dlg.new
dlgResult = dlg.ShowDialog # show a modal dialog
if dlgResult != DialogResult.OK
    MessageBox.Show('NOT OK') # MessageBox.Show is modal
else
    MessageBox.Show('OK')
end