基本上,我有一个带有自定义控件的表单(没有别的).自定义控件完全为空,表单将KeyPreview设置为true.
使用此设置,我没有收到任何箭头键或Tab的任何KeyDown事件.键盘上的其他每个键都有效.我有KeyDown事件处理程序连接到具有此类事件的所有内容,因此我确信我没有遗漏任何内容.
另外值得注意的是,如果我删除(完全空)自定义控件,我会得到箭头键事件.
这到底是怎么回事?
编辑:
我将此添加到窗体和控件中,但我仍然没有获得箭头键:
protected override void WndProc(ref Message m) {
switch (m.Msg) {
case 0x100: //WM_KEYDOWN
//this is the control's version. In the form, it's this.Text
ParentForm.Text = ((Keys)m.WParam).ToString();
break;
}
base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)
我还检查了Spy ++,并确定表单本身没有得到任何WM_KEYDOWN消息,它们都是控件.但是,也就是说,控件IS获取箭头键WM_KEYDOWN消息.叹.
编辑2:我还用这个版本更新了ZIP文件.请看看它,如果你想帮忙......
编辑3:
我已经想到了这一点.表格正在吃箭头键,可能是为了保持孩子们的注意力.事实证明,如果表格为空,我会收到事件.
无论如何,如果我将此代码添加到表单中,我会再次开始获取事件:
public override bool PreProcessMessage(ref Message msg) {
switch (msg.Msg) {
case 0x100: //WM_KEYDOWN
return false;
}
return base.PreProcessMessage(ref msg);
}
Run Code Online (Sandbox Code Playgroud)
当我覆盖它时,表单没有机会完成它的脏工作,所以我得到了我期望的KeyDown事件.我认为这样做的副作用是我不能再使用我的键盘来导航表格(在这种情况下不是很大,因为它是一个游戏,这个练习的全部目的是实现键盘导航!)
如果有办法,问题仍然是关于如何"正确"禁用这个问题......
使用下面的代码,左箭头键和右箭头键按预期运行,但不识别向上和向下箭头(单步执行它,在适当的情况下满足前两个条件,但后两个条件永远不会):
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
TextBox tb = (TextBox)sender;
if (e.KeyCode.Equals(Keys.Left)) {
SetFocusOneColumnBack(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Right)) {
SetFocusOneColumnForward(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Up)) {
SetFocusOneRowUp(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Down)) {
SetFocusOneRowDown(tb.Name);
e.Handled = true;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我该如何解决?
这是我在踩过e.Keycode时看到的内容.如果我按下
e.KeyCode = "LButton | MButton | Space"e.KeyCode = "LButton | RButton | MButton | Space"e.KeyCode = "RButton | MButton | Space"e.KeyCode …当我在bash中运行jdb时,箭头键会产生奇怪的垃圾:
up: ^[[A
down: ^[[B
left: ^[[D
right: ^[[C
Run Code Online (Sandbox Code Playgroud)
所以我不能使用命令历史记录,或纠正拼写错误,因为我根本无法导航文本,这非常烦人.这个问题有方法解决吗?
Java版本信息:
"1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (fedora-68.1.11.5.fc16-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
Bash版本信息:
GNU bash, version 4.2.28(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud) 我使用VS2013作为我的IDE,自从我安装它以来,在按下ALT和任何箭头键时非常奇怪.我使用ALT + LEFT和ALT + RIGHT导航向前/向前导航,但是一旦VS完成跳转,它就会写出一个字符.
这是在跳跃之前:

这是在跳转后/按下ALT + LEFT之后:

这些是正在写的字符:
我一直在使用VS2013工作,我以前从未见过这个.我知道按ALT + NUMPAD_KEYS产生ASCII字符,但为什么我的箭头键只发生在VS中呢?对我来说显然ALT + UP与按ALT + 6(http://www.irongeek.com/alt-numpad-ascii-key-combos-and-chart.html)相同.我实际上换掉了我的键盘,看看它是否与此有关.没有快乐.
有任何想法吗?
更新1:
看起来这个人有一个类似的问题,但在Windows上使用Eclipse:
https://superuser.com/questions/668394/turn-off-alt-numeric-keypad-ascii-symbol-insertion
可悲的是他的帖子没有答案.
更新2 /解决方案:
根据'Hans Passant'的评论,我找到了解决方案.请参阅下文了解详情.
我正在寻找允许使用箭头键将元素聚焦在树视图中的解决方案。
目前,我有 treeView (ul) 和 treeNode (li)。每个 treeNode 可能有自己的 treeView 等等。每个 treeNode 都有tabIndex="0"属性来添加使用Tab键在 treeView 中导航的可能性。它工作正常。但我想添加键盘箭头支持来做同样的事情。
知道如何做到这一点吗?PS 我不想使用任何 3rd 方库,除了纯 React、JS。
<section>
<header>
{ title }
</header>
<ul>
<li>
<section>
<header>
{ title }
</header>
<ul>
// etc.
</ul>
</section>
</li>
</ul>
<section>Run Code Online (Sandbox Code Playgroud)
目前我正在开发一个 Java 项目,该项目是控制台驱动的。我想实现一个功能,当用户在程序的命令行中按向上箭头时,命令行将显示用户运行的最后一个命令。
我发现了一些关于键盘事件的信息,如下所示,
public void keyPressed(KeyEvent evt);
public void keyReleased(KeyEvent evt);
public void keyTyped(KeyEvent evt);
Run Code Online (Sandbox Code Playgroud)
但是,我只是不知道如何将命令字符串带到命令行。例如,当用户按下“向上”时,该命令应该带回最后一个命令作为命令行上的预输入。
我正在创建一个使用箭头键移动精灵的游戏。我已经添加了箭头键和字母 n 的键绑定,但箭头键不起作用。这是我的代码:
public class MyPanel extends JPanel {
Sprite sprite = new Sprite();
Timer gameClock = new Timer(DELAY, new ActionListener(){
public void actionPerformed(ActionEvent e){
sprite.move();
// omit other methods
}
});
// omit other member variables
public MyPanel(){
Abstract Action newGameAction = new AbstractAction("new game") {
public void actionPerformed(ActionEvent e){
doNewGame();
}
}
setFocusable(true);
addKeyBinding(new Pair<String, Action>("N", newGameAction));
ArrayList<Pair<String, Action>> pairs = sprite.findKeyBindingPairs();
for (Pair<String, Action> p : pairs)
addKeyBindings(p);
gameClock.start();
// omit other panel init
}
private void …Run Code Online (Sandbox Code Playgroud) 我有一个关于灯箱的问题,请参阅我的 jsFiddle。单击其中一个图像会打开更大版本的绘画作为页面叠加。
如何使用ESC按键关闭此页面叠加层?
以及如何使用箭头键移动到下一个图像?
我需要什么样的 jQuery 插件 / javascript 才能做到这一点?
<ul class="lb-album">
<li>
<a href="#Fly-My-Pretties-Walled-Garden">
<img src="http://sandipa.com.au/images/works-for-sale/thumbs/Fly-my-Pretties-Walled-Garden-sm.jpg" alt="Fly My Pretties: Walled Garden">
<span>Fly My Pretties</span> </a>
<div class="lb-overlay" id="Fly-My-Pretties-Walled-Garden">
<a href="#page" class="lb-close">x Close</a>
<img src="http://sandipa.com.au/images/2010-2011/1000px-wide/Fly-my-Pretties-Walled-Garden.jpg" alt="Fly My Pretties: Walled Garden">
<div>
<h3>Fly My Pretties: Walled Garden<span>mixed media on canvas</span></h3>
<p>72 x 137 cm</p>
<a href="#Light-that-Shapes-the-Shadows" class="lb-prev">Prev</a>
<a href="#Central-Highlands-Circle-of-Gold" class="lb-next">Next</a>
</div>
</div>
</li>
<li>
<a href="#Central-Highlands-Circle-of-Gold">
<img src="http://sandipa.com.au/images/works-for-sale/thumbs/Central-Highlands-Circle-of-Gold-sm.jpg" alt="Central Highlands: Circle of Gold">
<span>Circle of Gold</span> </a> …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个在WebView中加载html页面的Android应用程序,它工作正常,除了在D-pad箭头键上发生操作的事实不起作用.如果我用其他键改变箭头的动作,它就可以了.在Web浏览器中加载html页面工作正常,PC键盘箭头键返回正确的操作,但在Android WebView中,D-pad箭头键不起作用.
这就是我在js中按下虎键的方式:
window.addEventListener('keydown', keyDownHandler, true);
function keyDownHandler(evt){
var keyCode=evt.keyCode;
alert(keyCode);
}
Run Code Online (Sandbox Code Playgroud)
除箭头键外,按任何其他键将返回键码,但箭头不会.
这可能是重复的,如:android WebView:在JavaScript中处理箭头键但没有找到工作的解决方案.
有什么方法可以在Android WebView中获得D-pad箭头键代码?
我正在尝试在bash中使用vi模式.通过.inputrc(在OSX上):
set editing-mode vi
Run Code Online (Sandbox Code Playgroud)
在vi插入模式下,右箭头键将光标向右移动,但它在行中的最后一个字符处停止.如果光标超过了行的末尾,则将光标移动到左侧.所以,总而言之,你可以去的最右边是行中的最后一个字符.
$ cd /usr/locl/bin
# Move the cursor to the middle of the line, and fix something there
$ cd /usr/local/bin
# Now move the cursor back to the end, and write a character (/)
$ cd /usr/local/bi/n
Run Code Online (Sandbox Code Playgroud)
如上所示,这意味着您无法在不进入命令模式(并使用"a")的情况下编辑行尾.
我发现一篇文章似乎表明readline/bash的版本可能是问题所在.但是我使用brew来升级bash(GNU bash,版本4.3.42),甚至尝试安装和链接readline(6.3.8),正如该站点所推荐的那样.但没有运气.升级可能不正确.
注意:我希望在bash中使readline与默认值相同(对于其他定期使用我的终端的人),但允许我使用vim模式.这意味着我不需要解决方法,而是需要修复.