C#使用向上箭头键获取先前的输入

时间:2012-04-12 08:38:34

标签: c# list keydown

Okai,让我们说:

  • 2个文本框(textBox1,textBox2)
  • 1按钮(按钮1)
  • 列表(list1)

我要做的是将textBox1中输入的文本存储到list1中,以便我可以轻松检索以前的输入。当我按下按钮时,textBox1中的文本将被写入list1。这是我到目前为止的代码:

    private static List<string> list1 = new List<string>();

    list1.Add(textBox1.Text); // <-- On the button click event.

private void ServerInputtextboxCommand_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Up:
                foreach (var usedCommand in list1)
                {
                    textBox1.Text = usedCommand;
                }
                break;
        }
    }

所以我试图通过向上箭头键将我在textBox1中输入的文本返回到textBox1。
我在textBox1中输入的文本将显示在textBox2中(但这与此无关)。

感谢所有想要帮助我的人,因为我不知道我做错了什么:(。

2 个答案:

答案 0 :(得分:3)

我建议使用Stack<T> - 跟踪会更容易。

然后你可以使用这样的东西:

public Stack<string> Undo { get; set; } // needs to be initialized before use
private void button1_Click(object sender, EventArgs e)
{
            if (string.IsNullOrEmpty(textBox1.Text))
                return;

            Undo.Push(textBox1.Text);
}

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
            if (e.KeyCode != Keys.Up)
                return;

            if (Undo.Count == 0)
                return;

            textBox2.Text = Undo.Pop();
}

如果你想要一个重做选项,那么你也可以有一个重做堆栈。

答案 1 :(得分:0)

看起来是一个好的开始。所以我们正在谈论胜利形式吧?

您是否希望此功能仅在选中文本框时有效?

我假设你想要的功能有点像Windows命令行终端,你按下它,它会带回以前的命令,一次一个。你的foreach循环看起来会写/重写文本框的所有先前内容。我认为这不是你想要的。

我建议为列表维护一个索引,以便在文本框中标识当前活动的元素。然后每次用户按下向上按钮时,递增该索引,以便下次按下向上按钮时,系统知道下一个元素的索引。如果我的假设是正确的话,我认为你根本不需要循环。

更新: 伪代码:

int index = -1;
list listy = new listy;

onButtonClick{
-add current contents to list at index + 1
}

onKEYPress{
if(listy.get(index +1 ) is not null or empty)
{
-textbox.text = listy.get(index +1 )
++ index;
}
}