2014-01-04 2 views
0

Может кто-нибудь объяснить мне, что я делаю неправильно?Почему мои методы повтора и отмены для текстового поля не так?

private Stack<string> undo = new Stack<string>(); 
private Stack<string> redo = new Stack<string>(); 

private void undoToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
     insert(); 
    if (textBox1.Text !=null) 
    { 
     redo.Push(textBox1.Text); 

     if (undo.Count != 0) 
     { 
      textBox1.Text = undo.Pop(); 
     } 
    } 
} 

private void redoToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (redo.Count !=0) 
    { 
     textBox1.Text = redo.Pop(); 
    } 
} 

    void insert() 
    { 
     undo.Push(textBox1.Text); 
    } 

Этот код не изменяет мой textbox..maybe проблемы является способом я работать witf текстовое поле?

+1

Вы должны отладить его. – nvoigt

ответ

0

Когда вы добавляете элементы в откат или стопку повтора? Вы должны добавлять элементы в стопку отмены каждый раз, когда вы меняете свой текст. В противном случае стек отмены всегда будет пустым.

EDIT: Нет смысла добавлять элементы в стек отменить, прежде чем пытаться его отменить. Вы должны добавлять элементы в стек отмены в событии KeyPress или TextChanged в TextBox. Не просто вызывайте метод insert в undoToolStripMenuItem_Click.

+0

Я забыл добавить один метод.sorry – user3142035

+0

@ user3142035 Изменил свое сообщение, чтобы отреагировать на ваши изменения. – FlashTek

+0

спасибо, что я использовал textchanged – user3142035

0

Возможно, вам нужно позвонить в офис insert на мероприятии textChanged? вы вызываете его в undoToolStripMenuItem_Click для первого time.then вашего стек отката имеют один element.Then вы сразу это сделать:

textBox1.Text = undo.Pop(); 

Здесь ваш уничтожьте имеет один элемент, который является текущим текстом, и вы просто заменить ваше содержание TextBox и ваш текст никогда не меняется.

+0

хорошо, я понимаю ошибку, спасибо – user3142035