3
  1. 使用球拍 gui 库,我发现我无法显示真正的模态对话框,当它显示时,无法激活其父窗口。
  2. 尽管对话框会阻塞其父级的事件空间,但可以单击父级窗口中的菜单栏,从而可以一次又一次地显示相同的对话框。以下是代码:

#lang racket/gui

(define frame (new frame%
                   [label "test"]
                   [width 200]
                   [height 200]))

(define mb (new menu-bar% [parent frame]))

(let ([m (new menu% 
              [parent mb]
              [label "&About"])])
  (new menu-item%
       [parent m]
       [label "&About"]
       [callback (lambda (b e) (message-box "About" "This is a test." frame))])
  )


(send frame show #t)

(ps消息框可以弹出对话框-同(new dialog% [parent frame])

所以如果我们忽略第一个问题,我们可以显示一个禁用父菜单栏的模态对话框吗?

此外,真的不可能在球拍/gui中制作真正的模态对话框吗?

(我正在使用Win7)

4

3 回答 3

2

而不是使用 a frame%,我想你想在dialog%这里使用一个类。我不确定您是否可以轻松制作具有菜单栏的模态对话框。

哦,还请记住,这dialog%只是其事件空间的模态。因此,如果您从 DrRacket 运行一个创建对话框的代码片段,那么 DrRacket 本身仍然可以访问。

于 2012-04-04T19:18:51.913 回答
2

跟进:这是一个错误,将被修复。

参考:

  1. http://lists.racket-lang.org/users/archive/2012-April/051275.html
  2. http://git.racket-lang.org/plt/commit/9d563c786a71b621fcd2909c917b49939e0d11b0
于 2012-04-05T17:03:42.147 回答
0

这似乎有点骇人听闻,但是您可以自己做, [callback (lambda (b e) (send mb enable #f) (message-box "About" "This is a test.") (send mb enable #t))]或者dynamic-wind如果涉及延续,则可以使用,在您的示例中它们不是。

于 2012-04-04T22:54:21.313 回答