pharo中的事件系统

时间:2014-09-03 17:56:37

标签: events smalltalk pharo

我正在尝试在Pharo 3.0中创建一个简单的用户界面。在某个地方我需要一个颜色选择器,所以我考虑使用ColorSelectorDialogWindow

我的问题是我不确定如何从中获得颜色。我已经看到它有一个selectedColor消息,但是当用户点击确定按钮时,我想念一种实际捕获事件的方法。

我已经尝试了on: send: to:但它似乎没有帮助,无论如何我都不知道事件名称。我也看到,在确认后,消息applyChanges被发送给自己,所以我尝试将ColorSelectorDialogWindow子类化为仅添加

applyChanges
    super applyChanges.
    self triggerEvent: 'selectedColor' with: self selectedColor.

但似乎我无法使用selectedColor抓住我自己的on: send: to:事件。

挂钩对话框的正确方法是什么,更常见的是在组件之间发送事件?

2 个答案:

答案 0 :(得分:2)

公告,这是Pharo当前没有很好记录的部分。 在工作区中尝试:

| colorPicker |
colorPicker := ColorSelectorDialogWindow new.
colorPicker announcer when: ColorChanged do: [ :announcement | UIManager inform: 'Selected color: ' , announcement newColor asString ].
colorPicker open.

这是可以在ColorChanged公告类评论中找到的示例 通过将newColor发送到ColorChanged公告,您可以获得所选颜色。

答案 1 :(得分:1)

您也可以以模态方式打开ColorSelectorDialogWindow。在这种情况下,openModal方法仅在对话框关闭后返回,您可以直接从对话框中获取所选颜色:

| colorPicker |
colorPicker := ColorSelectorDialogWindow new.
colorPicker openModal.
colorPicker cancelled
    ifFalse: [UIManager inform: colorPicker selectedColor asString]

您可能不希望像我的示例中那样使用模态,而是将模态设置为特定的其他窗口。在这种情况下,请使用anyWindow openModal: colorPicker