【问题标题】:C# Get previous input with arrow up keyC# 使用向上箭头键获取先前的输入
【发布时间】:2012-04-12 08:38:33
【问题描述】:

Okai,假设我们有:

  • 2 个文本框(textBox1、textBox2)
  • 1 个按钮 (button1)
  • 列表 (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 中(但这与此处无关)。

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

【问题讨论】:

  • 您的 foreach 循环将始终将最后一个 usedCommand 分配给您的 TextBox1
  • 我怎样才能得到比方说,列表中的第二项?
  • 你的意思是你想在以前输入的命令之间循环?!

标签: c# list keydown


【解决方案1】:

我建议使用Stack&lt;T&gt; - 它会更容易跟踪。

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

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();
}

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

【讨论】:

  • 也许是一个菜鸟问题,但为什么在这种情况下堆栈比列表更好?
  • stack 是一种后进先出数据类型。所以它会在你输入它们时堆叠你的输入并反向弹出它们。你可以在这里阅读更多 - msdn.microsoft.com/en-us/library/system.collections.stack.aspx
  • 好吧,看起来确实比列表好得多。谢谢,我也想试试这个。只是找到完成此任务的最佳方法:)!
  • @NoviceProgrammer 您的解决方案立即生效!再次感谢。
  • 我不认为这是很好的工作。如果将字符串从堆栈中弹出,下次用户在文本框中输入内容时,堆栈将被重置。是的?!如果我错了,请纠正我:P
【解决方案2】:

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

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

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

【讨论】:

  • 伙计,你读懂了我的想法吗?这正是我的想法!
  • 如果您需要更多说明,请告诉我
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多