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

本文关键字:获取 输入 | 更新日期: 2023-09-27 18:30:46

Okai,假设我们有:

    2
  • 个文本框(文本框 1、文本框 2)
  • 1 按钮
  • (按钮 1)
  • 列表 (列表1)

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

    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 中(但这在这里无关紧要)。

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

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

我建议使用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();
}

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

看起来是一个好的开始。所以我们说的是赢的形式,对吧?

是否希望此功能仅在选中文本框时起作用?

我假设您想要的功能有点像 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;
}
}