C#中最接近Java的KeyBindings是什么?我试图将Swing应用程序移植到C#,但不清楚我应该使用哪种方法。 以下是我正在移植的Java示例:
Action goUp = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
panel.upPressed = true;
}
};
Action stopUp = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
panel.upPressed = false;
}
};
InputMap getInputMap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
getInputMap.put(KeyStroke.getKeyStroke("W"), "goUp");
getInputMap.put(KeyStroke.getKeyStroke("released W"), "stopUp");
panel.getActionMap().put("goUp", goUp);
panel.getActionMap().put("stopUp", stopUp);
答案 0 :(得分:2)
在Winforms中,我不知道任何与InputMap
完全相同的内容。键盘输入通常以两种方式之一处理:
MenuItem.Shortcut
。这可以在Designer中或代码中分配。按相关键将调用菜单项的Click
事件处理程序。当然,要使用此方法,您需要将要执行的操作在UI中表示为菜单项。KeyPress
事件。根据您的示例,您可能希望处理KeyDown
和KeyUp
,以便您可以跟踪密钥的实际状态。请注意,您将收到多个KeyDown
个事件,因为自动重复启动密钥;如果这对您的处理程序来说是一个问题,那么您需要跟踪关键状态以及您已经看过的关键字KeyDown
,如果您已经看过,则只处理KeyDown
事件相应的KeyUp
事件。请注意,WPF确实具有与InputMap
更相似的键绑定模型。当然,语法完全不同,但它分离了菜单项,命令和键绑定的概念,因此您可以根据需要进行混合和匹配(特别是,具有与任何菜单不对应的键绑定)项目)。因此,如果使用WPF是一个选项,您可能会发现转换的一部分更容易(可能只有那部分,因为Swing更像是Winforms而不是WPF :)。