events - pharo 中的事件系统

标签 events smalltalk pharo

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

我的问题是我不确定如何真正从中获取颜色。我已经看到它有一个 selectedColor 消息,但我错过了一种在用户单击“确定”按钮时实际捕获该事件的方法。

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

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

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

Hook 对话框的正确方法是什么,更一般地说,在组件之间发送事件的正确方法是什么?

最佳答案

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

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

这是可以在 ColorChanged 公告类注释中找到的示例。
您可以通过将 newColor 发送到 ColorChanged 公告来获取所选颜色。

关于events - pharo 中的事件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650731/

相关文章:

android - 无法在 adb shell getevent 上获得鼠标点击坐标

smalltalk - 类别和包中的类组织如何在不同版本的 Pharo 中工作?

smalltalk - 如何在 GNU Smalltalk 中添加具有 2 个不同名称的相同方法?

twitter-bootstrap-3 - 海边的 Bootstrap (在 Pharo 上): incorrect JQuery version

dictionary - 如何在 Smalltalk 中按值对字典进行排序?

Javascript 事件通过 sass mixin 改变样式

jQuery 结合焦点和悬停

javascript - mousemove 和跨浏览器 e.which

string-comparison - 如何比较 Smalltalk 中的本地化字符串?