Scheme 方案:如何清除对话框中的所有消息

Scheme 方案:如何清除对话框中的所有消息,scheme,racket,Scheme,Racket,我有一个方法可以在对话框对象的列表中打印消息。下面的代码正在打印“abccabcde”,我希望它是“abcde”。我如何解决这个问题?是否有一种方法可以清除对话框对象中的所有消息 #lang racket/gui (define frame (new frame% [width 300] [height 300] [label "Frame"])) (new button%

我有一个方法可以在对话框对象的列表中打印消息。下面的代码正在打印“abccabcde”,我希望它是“abcde”。我如何解决这个问题?是否有一种方法可以清除对话框对象中的所有消息

#lang racket/gui

(define frame (new frame%
                   [width 300]
                   [height 300]
                   [label "Frame"]))

(new button%
     [parent frame]
     [label "Messages"]
     (callback (lambda (button event)
                 (send msg-dialog show #t))))

(define msg-dialog (new dialog%
                         (label "Name")
                         (parent frame)
                         (width 300)
                         (height 300)))

(define (make-msg%)
  (new message% [parent msg-dialog]     
       [label "Message: "]
       [min-width 80]
       [min-height 30]))

(define (print-msg lst)
  (if (null? lst) 
      (void)
      (begin
        (send (make-msg%) set-label (symbol->string (car lst)))
        (print-msg (cdr lst)))))

(define list '(a b c))
(print-msg list)
(set! list (append list '(d e)))
(print-msg list)

(send frame show #t)
该库有一个功能,可以轻松完成:

 (require (planet jphelps/guiml))
 (delete-children msg-dialog)
delete children
是这样实现的,如果您愿意:

(define (delete-children object (id #f))
  (send object change-children (λ (x)
                  (if id
                      (filter (λ (widget)
                         (not (eq? (send widget ___get-guiml-name) id)))
                          x)
                      '()))))

考虑改用文本字段%1

http://docs.racket-lang.org/gui/text-field_.html?q=message%25
对于文本字段,
text%
对象最有用的方法如下:
(发送文本获取文本)
返回编辑器的当前文本

(发送文本擦除)
从编辑器中删除所有文本

(发送文本插入str)
在当前插入符号位置将str插入编辑器