انجام نشدن عمل undo & redo در برنامه گرافیکی
مشکل این تکه کد چیه که عمل undo & redo انجام نمیشه . (کد های زیر قسمتی از یک برنامست که اینجا کپی کردم )
سپاس
private Stack<Image> _undostack = new Stack<Image>();
private Stack<Image> _redostack = new Stack<Image>();
public void undo()
{
if (_undostack.Count > 0)
{
_redostack.Push(_undostack.Pop());
pictureBox1.Image = _redostack.Peek();
pictureBox1.Refresh();
}
}
public void redo()
{
if (_redostack.Count > 0)
{
_undostack.Push(_redostack.Pop());
pictureBox1.Image = _undostack.Peek();
pictureBox1.Refresh();
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = Graphics.FromImage(bmp);
Pen p = new Pen(currentcolor, drawingsize);
SolidBrush brush = new SolidBrush(Color.White);
if (act == "pen")
{
if (e.Button == MouseButtons.Left)
{
g.DrawLine(p, x, y, e.X, e.Y);
x = e.X;
y = e.Y;
}
x = e.X;
y = e.Y;
pictureBox1.Image = bmp;
_undostack.Push(pictureBox1.Image);
}
private void undoToolStripMenuItem_Click(object sender, EventArgs e)
{
undo();
redoToolStripMenuItem.Enabled = true;
undoToolStripMenuItem.Enabled = false;
}
private void redoToolStripMenuItem_Click(object sender, EventArgs e)
{
redo();
redoToolStripMenuItem.Enabled = false;
undoToolStripMenuItem.Enabled = true;
}
7 پاسخ
مرسی داداش . زحمت کشیدی . از استادمون میپرسم بینم اون چی میگه . جوابو اعلام میکنم
اگه تا به حال با پشته کار نکردی یه برنامه کوچیک از پشته رشته ای امتحان کن ببین مشکل از نحوه استفاده از stack نباشه
راستش من هم شک دارم میشه image رو توی پشته گذاشت یا نه واسه همین گفتم خیلی سرچ زدم انگلیسی تا یه مثال از پشته image پیدا کنم اما پیدا نشد.
نمیشه به جای image از نوع داده Bitmap استفاده کنید؟ شاید دزست بشه
و یه سوال اینکه برنامه هیچ خطایی تولید نمی کنه؟
آیا میشه image رو توی پشته قرار داد؟؟ من اصلا توی سی شارپ با پشته کار نکردم . چیزی ازش بلد نیستم
منظورتون اینه که bitmap رو توی پشته push کنم؟؟ این کارو کردم باز هیچ عکس العملی نشون نداد . برنامه هم هیچ خطایی تولید نمیکنه . برنامه paint هستش و همه قسمتاش کاملا درست کار میکنه به جز این undo & redo
آره حتما اعلام کن دوست دارم بدونم