C# Piccolo ZUI - Squiggles только тогда, когда CTRL покачивается?
Я использую библиотеку Piccolo 2D ZUI в приложении C# Winform.
Один из примеров, который показывает библиотека, - это добавление обработчика squiggle (рисование линий) на холст.
Проблема состоит в том, что если вы включите обработчик squiggle и разрешите перетаскивание холста, то оба события происходят одновременно.
Я хотел бы унаследовать PDragEventhandler, чтобы он работал только тогда, когда не нажата клавиша CTRL. Затем, когда нажата клавиша CTRL, спиглер запускается (я понял это).
Код, используемый для обработчика перетаскивания:
InitializeComponent();
//add input event listener
pCanvas1.AddInputEventListener(new PDragEventHandler());
Могу ли я унаследовать PDragEventhandler, а затем сказать, что выполняется только тогда, когда CTRL не нажата? Или мне нужно перекомпилировать библиотеку Piccolo, чтобы включить эту функцию?
2 ответа
Для 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# это не так, и вам нужно будет расширить его вручную или добавить. В третьей части следующего урока есть описание того, как это сделать для C# (с которым я не очень знаком) .
Для C# я бы предположил, что слушатель должен выглядеть примерно так:
protected void squiggle_ControlDown(object sender, PInputEventArgs e) {
PNode node = (PNode)sender;
switch (e.KeyCode) {
case Keys.Control:
updateSquiggle();
break;
}
}
Надеюсь, это поможет, хотелось бы, чтобы прошло не так много времени с тех пор, как я использовал C#, или я мог бы дать вам более конкретный ответ.
Вы можете переопределить метод acceptptsEvent() для управления отправкой событий. Например, чтобы принимать события только с модификатором управляющей клавиши:
public class DragHandler extends PDragEventhandler {
@Override
public boolean acceptsEvent(PInputEvent event, int type) {
return super.acceptsEvent(event, type) && event.isControlDown();
}
}