C#Piccolo ZUI - 只有当CTRL摆动时才会出现Squiggles?

时间:2009-12-21 17:47:16

标签: c# winforms piccolo zui

我在C#Winform应用程序中使用Piccolo 2D ZUI library

该库显示的一个示例是向画布添加squiggle(线条图)处理程序。

问题在于,如果启用了波形处理程序并允许画布拖动,则两个事件同时发生。

我想要做的是继承 PDragEventhandler ,以便它仅在未按下CTRL时运行。然后当按下CTRL键时,曲棍球将会运行(我弄明白了)。

用于拖动处理程序的代码是:

InitializeComponent();
//add input event listener            
pCanvas1.AddInputEventListener(new PDragEventHandler());

我可以继承 PDragEventhandler ,然后说只在没有按下CTRL时运行吗?或者我是否需要重新编译Piccolo库才能启用此功能?

2 个答案:

答案 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();
    }
}