来自函数的GUI元素未以红色语言显示

时间:2017-09-17 08:03:27

标签: function user-interface rebol red

我正在使用以下代码尝试从函数中获取GUI元素:

  mypanelfn: func[] [
    collect[
      repeat i 10 [ 
        print append copy "i in loop: " i
        keep [t: text]  keep append copy "message: " i
        keep [field "entry"    
              button "Click" [t/text: "clicked"] return]]]]

  view [ 
    do [mypanelfn]]

没有任何错误消息和循环,并且还会显示窗口。但这只是一个没有任何文字,字段或按钮的小空窗口。

此代码有什么问题?

修改:在probe节目之前放置collect(为了清晰起见,我添加了换行符):

[t: text "message: 1" field "entry" button "Click" [t/text: "clicked"] return 
t: text "message: 2" field "entry" button "Click" [t/text: "clicked"] return 
t: text "message: 3" field "entry" button "Click" [t/text: "clicked"] return 
t: text "message: 4" field "entry" button "Click" [t/text: "clicked"] return 
t: text "message: 5" field "entry" button "Click" [t/text: "clicked"] return

4 个答案:

答案 0 :(得分:3)

此方法不需要设置任何变量 - 它通过在公共父(panel)中包含面的每次迭代来工作:

view collect [
    keep [below space 0x0]
    repeat i 10 [
        keep compose/deep [
            panel [
                origin 0x0
                text (rejoin ["Message Number: " i])
                field "entry"
                button "Click" [face/parent/pane/1/text: "clicked"]
            ]
        ]
    ]
]

face/parentpanel脸,其第一个孩子(pane/1)是文本框(origin不会创建脸部。)

答案 1 :(得分:2)

然而,你并不一定需要这个功能:

view mypanelfn

作品。

注意:Rebol中的等效代码需要layoutview layout mypanelfn

发生这种情况的原因是view处理blocks![]内的任何内容)。所以你不必do

一般来说,将Red视为一种功能性的消息传递语言会更好。与具有程序和陈述的命令式语言形成对比,一切都是表达。

答案 2 :(得分:1)

这对我在rebol / view中起作用:

lay: mypanelfn
insert head lay 'across
view layout lay

enter image description here

我认为,在您学习这些内容时,您需要查看生成的VID代码,以便在尝试查看之前检查没有问题。

答案 3 :(得分:1)

再一次;您需要为要解决的元素使用唯一的名称。这里有一个使用reduce而不是compose的解决方案

mypanelfn: func[] [
  collect[
    repeat i 10 [ 
      tname: to-word rejoin ['t i]
      print append copy "i in loop: " i
      keep  reduce [to-set-word tname 'text]  keep append copy "message: " i
      keep reduce [
       'field "entry" 'button "Click"  reduce  [ 
          to-set-path  reduce [
             tname 'text ]
            "clicked" ]
      'return ] ] ] ] 

我建议您使用控制台中的命令查看它们的作用。例如。

rejoin ['t i]创建一个字符串"t1",其中包含t和i的(减少/获取)值。

to-word将其更改为红色(bol)字t1

to-setword tname创建了一个字组t1:

to-set-path reduce [tname 'text ]创建了一个设置路径t1/text: