如何使用Racket GUI插件在文本字段中包装输入文本

时间:2016-04-22 22:28:23

标签: user-interface plugins racket

只需要一个包含输入

的文本字段%的基本示例
(define blogPost%
  (class horizontal-panel%
    (super-new)
    (define (callback button event)
      (define title-new-value (send titleoutput get-value))
      (define new-value (send output get-value))
      (save title-new-value new-value))
      ;;(display title-new-value)
      ;;(display new-value))
    (define button (new button% (label "Submit")
                        (vert-margin 0)
                        (parent this)
                        (callback callback)))
    (define titleoutput (new text-field% (label "    title")
                             (min-height 20)
                             (min-width 200)
                             (parent this)))
    (define output (new text-field% (label "blog")
                        (min-height 450)
                        (min-width 400)
                        (stretchable-width 300)
                        (vert-margin 0)
                        (parent this)))
    ))


(define f (new frame% (label "prism blog post GUI") (min-width 400) (min-height 500)))

(define tib (new blogPost%
                 (parent f)))

(send f show #t)

还有更多内容,基本上它将用户的输入保存到我们计划可访问并打印到屏幕的数据库中。但是,用户在输入文本字段时,只是在一行上水平键入,而且从不单词换行,并且输入按钮不会转到新行。这个问题是否可以解决?

1 个答案:

答案 0 :(得分:1)

要允许多行输入到文本字段,您需要将[style '(multiple)]添加到初始化参数中,如下所示:

    (define output (new text-field% [label "blog"]
                        [style '(multiple)]
                        [min-height 450]
                        [min-width 400]
                        [stretchable-width 300]
                        [vert-margin 0]
                        [parent this]))

然后文本字段允许换行,并在行变得太长时包装文本。

此文档为here。在那,它说:

  

有两种文本字段样式:

     
      
  • 单行文本可见,当用户按Return或Enter时(文本字段具有焦点)并且文本字段的框架或对话框未处理事件时,将生成特殊控件事件(请参阅on-traverse-char中的top-level-window<%>)。

  •   
  • 可以看到多行文字,并且不会特别处理Enter。

  •   

稍后,它指定style参数是符号列表并说:

  

该样式必须包含'single'multiple中的一个;前者指定单行字段,后者指定多行字段。