我有几个iOS应用程序,它们提供了固有的线性组织信息,允许用户通过屏幕控制向前和向后移动数据.我想允许使用键盘底座或配对蓝牙键盘的用户使用箭头键来回移动.由于应用程序是全屏的,因此用户体验非常重要,因为没有显示屏幕键盘作为副作用的风险.
我找不到可以在Apple的文档中执行此操作的API; 但我无法确定我是否使用了正确的搜索字词.
哪些API可以让我实现这一目标?
更新:我已将此作为Apple错误报告网站的增强功能.
我有一堆<DIV>兄弟姐妹,我想让用户使用向上和向下箭头在列表中上下移动并"突出显示"一个项目.在任何给定时刻只应突出显示一个项目.
最简单的方法是什么?
对键盘ArrowDown事件有以下监听器(它的关键代码是40):
window.onload = function() {
var itemsContainer = document.getElementById('cities-drop');
document.addEventListener('keyup',function(event){
if (event.keyCode == 40 && itemsContainer.style.display=='block') {
event.preventDefault();
for (var i=0;i<itemsContainer.children.length-1;i++){
if (itemsContainer.getAttribute('class').substr('hovered')!=-1){
itemsContainer.children[i].setAttribute('class','');
itemsContainer.children[i].nextSibling.setAttribute('class','hovered');
//break;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下hovering,ArrowDown按下后跳转到列表中的最后一个元素.
如果break取消注释,它会跳转到第二个元素并且不再跳跃.
无法得到原则,怎么做,听众总是听...
编辑
现场演示
或许,这是一个关闭的问题,但我不确定
首席开发人员表示,当他使用我的应用程序时,当他通过方向箭头键在TableLayoutPanel上的TextBoxes之间移动时,他的键盘会发出蜂鸣声.
但是,我听不到这种听觉活动.
这是我的代码:
// Had to intercept Up and Down arrows from Windows
private void textBoxPlatypi_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
TextBox tb = (TextBox)sender;
if (e.KeyCode.Equals(Keys.Up)) {
SetFocusOneRowUp(tb.Name);
return;
}
if (e.KeyCode.Equals(Keys.Down)) {
SetFocusOneRowDown(tb.Name);
return;
}
}
private void textBoxPlatypi_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;
}
}
Run Code Online (Sandbox Code Playgroud)
..他想也许我需要"e.Handled",但这在PreviewKeyDown事件中不可用.
有没有办法抑制哔哔声(这显然只发生在某些键盘或特定设置上(他使用的是Windows7,我还在使用XP))?
我现在有了这个代码:
private void textBoxPlatypus1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
switch (e.KeyCode) …Run Code Online (Sandbox Code Playgroud) 我有几个控件(按钮,groupboxes等)和一个大的WPF窗口Viewport3D内Border.
视口显示3D场景,我希望箭头键移动其相机.问题:箭头键总是将焦点更改为另一个UIElement.
如何通过箭头键禁用焦点更改并让它们改变相机位置?
当我按住左或右箭头键时,有没有办法移动光标.在以前的OSX版本中它曾经工作过.在我更新到Sierra之后,当我按住箭头键时,我的光标没有移动.
我正在努力寻找一种在控制台窗口中实现基本箭头键移动的方法.我遇到过一个只使用switch语句和一些变量的C#脚本,但我的老师坚持使用Java.
从其他一些主题来看,答案似乎都说在Java中是不可能的,除非你安装了某些(如果我错了,请纠正我)"框架",如JNA和/或Jline,但作为一个初学者,我不知道那些东西甚至是什么意思.
现在在你说我的老师是一个白痴,因为我认为我们可以做到这一点,他从来没有说过它必须是箭头键运动,我只是觉得它很酷:)
基本上,我有一个带有自定义控件的表单(没有别的).自定义控件完全为空,表单将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 …我使用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'的评论,我找到了解决方案.请参阅下文了解详情.
arrow-keys ×10
c# ×4
winforms ×3
javascript ×2
alt-key ×1
ascii ×1
beep ×1
bluetooth ×1
css ×1
direction ×1
events ×1
focus ×1
html ×1
ios ×1
java ×1
jquery ×1
keyboard ×1
keycode ×1
keydown ×1
keyeventargs ×1
listener ×1
loops ×1
macos-sierra ×1
wpf ×1
wpf-controls ×1