1

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

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

问题是,如果您启用 squiggle 处理程序并允许画布拖动,那么这两个事件会同时发生。

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

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

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

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

4

2 回答 2

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# 中,情况并非如此,您需要手动扩展它或添加它。在以下教程的第 3 部分中有关于如何为 C#(我不是很熟悉)执行此操作的描述


对于 C#,我假设侦听器应如下所示:

protected void squiggle_ControlDown(object sender, PInputEventArgs e) {
    PNode node = (PNode)sender;
    switch (e.KeyCode) {
            case Keys.Control:
                    updateSquiggle();
                    break;
    }

}

我希望这会有所帮助,我希望我使用 C# 的时间不长,或者我可以给你一个更具体的答案。

于 2010-01-07T05:55:21.780 回答
0

您可以覆盖acceptEvent() 方法来控制事件分派。例如,仅接受带有控制键修饰符的事件:

public class DragHandler extends PDragEventhandler {
    @Override
    public boolean acceptsEvent(PInputEvent event, int type) {
        return super.acceptsEvent(event, type) && event.isControlDown();
    }
}
于 2011-12-24T07:26:57.453 回答