基本上我有TextBoxes
的列表,我添加了我想要关注的所有TextBoxes
。
在Form1_Load
我正在使用Arrows
列出TextBoxes
列表,其中包含其他列表EURTextBox
,EurChange
等等...
所以我试图关注这些TextBoxes
,就像它们在类似于excel的2x6矩阵中一样。你能建议我的功能或有用的链接
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<TextBox> Arrows = new List<TextBox>();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 2; i++)
{
Arrows.Add(EURTextBox[i]);
Arrows.Add(EURchange[i]);
Arrows.Add(Cvetno1TextBox[i]);
Arrows.Add(Cvetno1change[i]);
Arrows.Add(Cvetno2TextBox[i]);
Arrows.Add(Cvetno2change[i]);
}
}
答案 0 :(得分:1)
这种功能的唯一问题,如何区分&#34;用户需要在单元格(文本框)之间导航&#34;或者&#34;用户想要导航到文本中进行编辑&#34;。
您可以使用文本框列表来解决它
foreach (var textBox in Arrows)
{
textBox.PreviewKeyDown += new PreviewKeyDownEventHandler(textBox_PreviewKeyDown);
}
事件实施
void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
int i = _arrows.IndexOf(sender as TextBox);
if (i <= -1) return;
switch (e.KeyCode)
{
case Keys.Left:
break;
case Keys.Right:
break;
case Keys.Up:
break;
case Keys.Down:
break;
}
}
根据列表和箭头键中项目的索引,您可以找到要移动到的文本框。
规则示例:
如果您不想使用向下键从5传递到6,则将条件更改为索引&lt; 11到(索引&lt; 11和索引!= 5)等
答案 1 :(得分:0)
首先,阅读这个问题的答案: Up, Down, Left and Right arrow keys do not trigger KeyDown event
他们会给你一个关于如何捕捉箭头按键的非常好的想法。
为了移动你需要知道当前关注哪个文本框(活动),为此你可能需要转向类似switch语句来查找ActiveControl的正确名称。像这样:
switch(this.ActiveControl.Name.ToString())
{
case "txtBox1":
// Do something fancy with this and the captured Arrow key
// and set focus to the correct text box.
break;
case "txtBox2":
// Do something fancy with this and the captured Arrow key
// and set focus to the correct text box.
break;
}
理论上应该这样做。 :)