1

岡井、私たちが持っているとしましょう:

  • 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に表示されます(ただし、これはここでは関係ありません)。

私が何を間違っているのかわからないので、私を助けたいと思っているすべての人に感謝します:(。

4

2 に答える 2

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

やり直しオプションが必要な場合は、やり直しスタックも使用できます。

于 2012-04-12T09:11:44.600 に答える
0

良いスタートのようです。だから私たちは勝利の形を話しているのですか?

この機能をテキストボックスが選択されている場合にのみ機能させますか?

Windowsのコマンドラインターミナルのような機能が必要だと思います。このターミナルを押すと、前のコマンドが1つずつ返されます。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;
}
}
于 2012-04-12T09:02:08.440 に答える