2

我写了这个 Fantom 类

using gfx
using fwt

class Test {

    Window window := Window {
        size = Size( 400, 320 )
        SashPane {
            Combo {
                items = Month.vals
                onModify.add( |e| { echo( "items.size is ${e->widget->items->size}" ) } )
            },
        },
    }

    Void main() {
        window.open
    }
}

当我运行它时,它会产生以下输出:

items.size is 12
items.size is 12

这意味着修改事件被触发了两次。它发生在屏幕上弹出窗口的同时,我没有机会修改 Combo 小部件上的任何内容。为什么?

这会在使用多个 Combo 小部件的真实类中引起问题,其中一些是相关的,并导致产生意外结果的级联事件。

请问有什么办法可以预防吗?

4

1 回答 1

2

我可以确认这是一个问题。

查看FWT Combo的 Java 源代码,它非常小,似乎没有做错任何事情,这让我相信这是SWT Combo Widget的问题。

这对你没有任何帮助,所以我快速玩了这个例子并找到了这个解决方法......

...在打开窗口并构建小部件onModify添加事件侦听器。通过使用事件来做到这一点:Window.onOpen()

using gfx
using fwt

class Testy {
    Void main() {
        Window {
            size = Size( 400, 320 )
            combo := null as Combo
            onOpen.add {
                combo.onModify.add { echo("Hello Mum!") }
            }
            SashPane {
                combo = Combo { items = Month.vals },
            },
        }.open
    }
}

现在您应该只Hello Mum!在实际修改组合时才获得 a 。

于 2017-07-19T09:04:21.883 回答