我已经为Ironruby编写了一段非常非常简单的代码来检查,如果一切正常的话:
require "System.Windows.Forms"
include System::Windows::Forms
form = Form.new
form.Show
当我直接在交互式Ironruby控制台中输入此代码时,它可以正常工作,但是当我将这段代码保存在 test.rb 文件中并通过以下方式执行ir test.rb
时命令提示符,Windows窗体在整个代码执行后立即弹出和关闭。 有没有办法避免这种行为?我尝试使用获取,但随后控制台正在等待输入,而表单被冻结。
答案 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