2012-04-12 78 views
1

岡井,讓我們說我們有:C#獲取箭頭彌補以前輸入鍵

  • 2文本框(textBox1中,TextBox2中)
  • 1按鈕(按鈕1)
  • 一覽表(列表1)

我想要做的是將已經輸入到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中(但這與此無關)。

感謝所有誰想要幫助我,因爲我不知道我做錯了:(。

+0

你的foreach循環將導致總是最後usedCommand被分配到你的TextBox1 – NoviceProgrammer 2012-04-12 08:50:17

+0

我怎麼能讓我們說,列表中的第二項? – 2012-04-12 08:52:26

+0

你的意思是你想要在最近輸入的命令之間循環?! – 2012-04-12 09:00:43

回答

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

,如果你想重做選項,那麼你可以有一個重做堆棧爲好。

+0

好的呼叫,比這個例子中的列表好 – ldgorman 2012-04-12 09:13:16

+0

也許是一個noob問題,但爲什麼堆棧比列表在這種情況下更好? – 2012-04-12 09:14:58

+0

堆棧是後進先出的數據類型。所以它會在你輸入時疊加你的輸入並反向彈出。你可以在這裏閱讀更多 - http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx – NoviceProgrammer 2012-04-12 09:17:08

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; 
} 
} 
+0

男人,你看過我的想法嗎?這正是我想到的! – 2012-04-12 09:04:48

+0

讓我知道,如果你需要更多的澄清 – ldgorman 2012-04-12 09:08:58