我在C#Winform应用程序中使用Piccolo 2D ZUI library。
该库显示的一个示例是向画布添加squiggle(线条图)处理程序。
问题在于,如果启用了波形处理程序并允许画布拖动,则两个事件同时发生。
我想要做的是继承 PDragEventhandler ,以便它仅在未按下CTRL时运行。然后当按下CTRL键时,曲棍球将会运行(我弄明白了)。
用于拖动处理程序的代码是:
InitializeComponent();
//add input event listener
pCanvas1.AddInputEventListener(new PDragEventHandler());
我可以继承 PDragEventhandler ,然后说只在没有按下CTRL时运行吗?或者我是否需要重新编译Piccolo库才能启用此功能?
答案 0 :(得分:3)
对于java来说,这是非常直接的。在初始化中,您需要进行以下更改:
public void mouseDragged(PInputEvent e) {
super.mouseDragged(e);
// Update the squiggle while dragging.
updateSquiggle(e);
}
到
public void mouseDragged(PInputEvent e) {
super.mouseDragged(e);
if (e.isControlDown()) {
updateSquiggle(e);
}
}
解释:这是可能的,因为PInputEvent继承了java事件,因此具有isControlDown()选项。在C#中不是这种情况,您需要手动扩展它,或者添加它。在以下 tutorial的第3部分中有关于如何为C#(我不是很熟悉)执行此操作的说明。
对于C#,我认为听众应该如下所示:
protected void squiggle_ControlDown(object sender, PInputEventArgs e) {
PNode node = (PNode)sender;
switch (e.KeyCode) {
case Keys.Control:
updateSquiggle();
break;
}
}
我希望这会有所帮助,我希望自从我使用C#以来没有那么久,或者我可以给你一个更具体的答案。
答案 1 :(得分:0)
您可以覆盖acceptEvent()方法来控制事件调度。例如,仅使用控制键修饰符接受事件:
public class DragHandler extends PDragEventhandler {
@Override
public boolean acceptsEvent(PInputEvent event, int type) {
return super.acceptsEvent(event, type) && event.isControlDown();
}
}