这可能是一个微不足道的问题,但是,我还没有找到答案。我正在尝试通过添加键导航(箭头键)的可能性来改进我的winforms应用程序。问题是我有许多按行和列排列的按钮,它已被证明很难导航。 UP / RIGHT和DOWN / LEFT箭头仅增加和减少索引,而不是沿指定方向移动。到目前为止,我唯一的想法是将按钮索引映射到2d数组并使用它作为按钮的引用,但是,我没有成功。任何人对如何实现这一点有一些想法或建议? 我在Visual Studio 2008和.NET3.5上使用C#
Control[,] MyButtons = new Control[4,3] { {b1,b2,b3},{b4,b5,b6},{b7,b8,b9},{btn_Clear,b0,btn_Cancel}};
for(int i=0;i<4;i++)
for (int j = 0; j < 3; j++)
{
switch (e.KeyValue)
{
case 13: //return
{ e.Handled = false; break; }
case 39: //Right
{
j++;
break;
}
case 38: //Up
{
i++;
break;
}
case 37: //Left
{
j--;
break;
}
case 40: //Down
{
i--;
break;
}
}
if (e.KeyValue != 13)
{
e.Handled = true; //Don't pass on the keystroke
MyButtons[i,j].Focus(); // Set the focus to the selected control
Application.DoEvents();
}
}
使用此代码,我不断为数组的每个元素获取此错误 无效的排名说明符:预期','或']'
答案 0 :(得分:0)
我会给你一个完整的例子,你可以推断你的项目/代码。
表单本身:
以下是该表单的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class frmButtons : Form
{
private Int32 _selectedButton = 1;
private Dictionary<Int32, Button> _buttonDict = new Dictionary<Int32, Button>();
public frmButtons()
{
InitializeComponent();
foreach (Button b in this.Controls.OfType<Button>().Where(x => x.Tag != null))
{
Int32 i;
if (Int32.TryParse(b.Tag.ToString(), out i))
_buttonDict.Add(i, b);
}
if (_buttonDict.Count > 0)
_buttonDict[_selectedButton].Focus();
}
private void frmButtons_KeyUp(Object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
_selectedButton -= 3;
e.Handled = true;
break;
case Keys.Down:
_selectedButton += 3;
e.Handled = true;
break;
case Keys.Left:
_selectedButton -= 1;
e.Handled = true;
break;
case Keys.Right:
_selectedButton += 1;
e.Handled = true;
break;
case Keys.Enter:
break;
}
if (_selectedButton < 1)
_selectedButton += 12;
else if (_selectedButton > 12)
_selectedButton -= 12;
_buttonDict[_selectedButton].Focus();
}
}
}
当你点击某个键时我注意到了一个问题...在表单中有一个默认行为,它尝试处理箭头键以移动到Tab顺序中的下一个。解决这个问题,你就明白了。对不起,但我没时间研究这个。