gpt4 book ai didi

java - C# WinForms 键绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 03:24:39 25 4
gpt4 key购买 nike

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);

最佳答案

在Winforms中,我不知道有什么与InputMap完全相同的东西。键盘输入通常通过以下两种方式之一进行处理:

  1. 快捷键,即 MenuItem.Shortcut 。这可以在设计器或代码中分配。按关联的键将调用菜单项的 Click 事件处理程序。当然,要使用此方法,您需要将要执行的操作在 UI 中表示为菜单项。
  2. UI 中的各种关键事件处理。根据您的需要,这可能会变得相当复杂,但通常是最合适的方法,并且是处理与菜单项无关的按键输入的主要方法。最简单的事件是KeyPress事件。鉴于您的示例,您可能想要处理 KeyDownKeyUp以便您可以跟踪 key 的实际状态。请注意,当按键自动重复启动时,您将收到多个 KeyDown 事件;如果这对您的处理程序来说是一个问题,您需要跟踪按键状态,并且对于您已经看到过 KeyDown 的按键,仅处理 KeyDown事件(如果您已看到相应的 KeyUp 事件)。

请注意,WPF 确实有一个与 InputMap 更相似的键绑定(bind)模型。当然,语法完全不同,但它打破了菜单项、命令和键绑定(bind)的概念,因此您可以根据需要混合和匹配(特别是,具有不对应于任何菜单的键绑定(bind))元素)。因此,如果使用 WPF 是一种选择,您可能会发现过渡的这一部分更容易(而且可能只是那部分,因为 Swing 在其他方面比 WPF 更像 Winforms :) )。

关于java - C# WinForms 键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com