我将FL_Value_Input
子类化,这样我可以在修改后为窗口小部件添加颜色,但用户尚未按下回车键。
愚蠢的是,如果事件是handle(int e)
事件,其他事件(例如FL_KEYDOWN
,FL_KEYUP
,{{},则永远不会调用FL_DRAG
函数1}}等)正在传播。
窗口小部件是窗口小部件层次结构的一部分...可能是此层次结构中的父节点之一正在吸收此特定的FL_FOCUS
事件吗?
编辑:显然,当我输入时,小部件也没有焦点(通过比较FL_KEYDOWN
和this
进行测试),这是奇怪的。
任何帮助都将不胜感激。
Fl::focus()
答案 0 :(得分:1)
使用FL_KEYDOWN是Windows的处理方式,正如您所发现的那样,因为您需要子类Fl_Input_:而不是Fl_Input,所以它不起作用,即便如此,它也无法正常工作。
相反,使用时(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY)。按下键并且clear_changed()时检查changed()。按下回车键时不设置。您可以在满足条件时更改颜色。
data: arreglo.map(function (value) {
return Number(value);
})
答案 1 :(得分:0)
对FLTK Google group做了回复,解释了问题......没有简单的解决方法......
FLTK直接向焦点小部件提供击键。 Fl_Value_Input 包含一个Fl_Input小部件,当您单击输入字段时,该小部件将成为焦点小部件。
因此,“父”Fl_Value_Input永远不会看到Fl_KEYDOWN事件。 请注意,我引用了“parent”,因为Fl_Value_Input是 very 特殊情况。它不是从Fl_Group派生的,但它表现得有点像 像一个Fl_Group小部件。
那么为什么派生的小部件会获得FL_KEYUP事件?那是另一个 FLTK的功能:FL_KEYUP事件也传递给焦点 小部件首先。但是,AFAICT没有核心FLTK小部件 处理FL_KEYUP事件 - 它们在句柄中都返回0() 方法。如果焦点小部件不处理FLTK尝试的事件 将它传递给父窗口小部件,然后通过窗口小部件 层次结构,直到它到达顶级窗口。因此(这是 恕我直言,最终所有小部件都将收到所有FL_KEYUP事件 除非一个小部件从其handle()方法返回1(即 通常不是这种情况)。取决于焦点小部件的深度 整个窗口小部件层次结构可能是某些窗口小部件变得相同 FL_KEYUP事件多次,因为所有父组的焦点 小部件尝试将事件传递给他们所有的孩子。