تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] التراجع عن الأمر (undo)
#1
السلام عليكم


كيف يمكن برمجة زر للتراجع عن أمر معين .. كمثل  (undo) (ctrl+z )
بالفيجوال بيسك
الرد }}}
تم الشكر بواسطة:
#2
مثلا اذا اردت التراجع عن امر معين من مربع نص استخدم الكود التالي
PHP كود :
TextBox1.Undo() 
الرد }}}
تم الشكر بواسطة: عدنان الشمري , hamada558
#3
بعتقد ان بعض الادوات تقبل تراجع مرة واحدة فاذا كان المطلوب تراجع اكثر من مرة محتاجة مكدس Stack يلي هو ما يضاف أخيرا يسحب اولا (فكرة رص الاطباق).
وفكرة Stack بيتم الاضافة ليها ب Push والسحب منها ب Pop .

وهاد رابط لموضوع (Multiple undo and redo in richtextbox - VB.NET) بعتقد فيه يلي تريده
https://social.msdn.microsoft.com/Forums...7b0795aee2



نقلت المشاركة من الرابط للتسهيل عليكم


Hi,

Here is a Class that i have that i don`t remember where it came from but, it is for multiple Undo/Redo actions. It also has some other options like Clear, CanUndo, and CanRedo that is pretty handy. You can add a class to your project by clicking (Project) on the VB menu and selecting (Add Class). Then copy this code to it.

كود :
Public Class UndoRedoClass(Of T)
   Private UndoStack As Stack(Of T)
   Private RedoStack As Stack(Of T)

   Public CurrentItem As T
   Public Event UndoHappened As EventHandler(Of UndoRedoEventArgs)
   Public Event RedoHappened As EventHandler(Of UndoRedoEventArgs)

   Public Sub New()
       UndoStack = New Stack(Of T)
       RedoStack = New Stack(Of T)
   End Sub

   Public Sub Clear()
       UndoStack.Clear()
       RedoStack.Clear()
       CurrentItem = Nothing
   End Sub

   Public Sub AddItem(ByVal item As T)
       If CurrentItem IsNot Nothing Then UndoStack.Push(CurrentItem)
       CurrentItem = item
       RedoStack.Clear()
   End Sub

   Public Sub Undo()
       RedoStack.Push(CurrentItem)
       CurrentItem = UndoStack.Pop()
       RaiseEvent UndoHappened(Me, New UndoRedoEventArgs(CurrentItem))
   End Sub

   Public Sub Redo()
       UndoStack.Push(CurrentItem)
       CurrentItem = RedoStack.Pop
       RaiseEvent RedoHappened(Me, New UndoRedoEventArgs(CurrentItem))
   End Sub

   Public Function CanUndo() As Boolean
       Return UndoStack.Count > 0
   End Function

   Public Function CanRedo() As Boolean
       Return RedoStack.Count > 0
   End Function

   Public Function UndoItems() As List(Of T)
       Return UndoStack.ToList
   End Function

   Public Function RedoItems() As List(Of T)
       Return RedoStack.ToList
   End Function
End Class

Public Class UndoRedoEventArgs
   Inherits EventArgs

   Private _CurrentItem As Object
   Public ReadOnly Property CurrentItem() As Object
       Get
           Return _CurrentItem
       End Get
   End Property

   Public Sub New(ByVal currentItem As Object)
       _CurrentItem = currentItem
   End Sub
End Class

Then as an example of using the class to Undo and Redo text in a RichTextBox on your Form you would use it like this.

كود :
Public Class Form1
   Private urc As New UndoRedoClass(Of String)()
   Private NoAdd As Boolean = False

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Button_Undo.Enabled = False
       Button_Redo.Enabled = False
       urc.AddItem(RichTextBox1.Text)
   End Sub

   Private Sub Button_Undo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Undo.Click
       NoAdd = True
       urc.Undo()
       RichTextBox1.Text = urc.CurrentItem
       Button_Undo.Enabled = urc.CanUndo
       Button_Redo.Enabled = urc.CanRedo
       NoAdd = False
   End Sub

   Private Sub Button_Redo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Redo.Click
       NoAdd = True
       urc.Redo()
       RichTextBox1.Text = urc.CurrentItem
       Button_Undo.Enabled = urc.CanUndo
       Button_Redo.Enabled = urc.CanRedo
       NoAdd = False
   End Sub

   Private Sub RichTextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
       If Not NoAdd Then
           urc.AddItem(RichTextBox1.Text)
           Button_Undo.Enabled = urc.CanUndo
           Button_Redo.Enabled = urc.CanRedo
       End If
   End Sub
End Class



If you say it can`t be done then i`ll try it

Proposed as answer by .paul. _ Thursday, October 02, 2014 2:39 AM
Marked as answer by JDS404 Thursday, October 02, 2014 6:55 PM
Wednesday, October 01, 2014 9:34 PM

IronRazerz
الرد }}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] undo/redo button mohamed sabry 1 156 15-01-24, 11:33 AM
آخر رد: تركي الحلواني
  طريقة عمل زر تراجع عن الامر undo احمد خطاب 1 2,138 13-12-19, 02:20 AM
آخر رد: alnasser
  تنفيذ الأمر عند الضغط على إنتر ZaerAllail 7 4,058 16-06-18, 11:58 PM
آخر رد: dametucorazon
  اضافة زر الأمر للتعديل حافظ حافظ 16 4,591 08-06-18, 02:24 AM
آخر رد: elgokr
Exclamation زر التراجع عن حفظ البيانات فى database noway 2 2,335 01-11-16, 06:01 PM
آخر رد: noway
  [نقاش] الأمر using والتخلص من المتغيرات samerselo 18 6,147 26-05-16, 02:06 PM
آخر رد: Abou Eman
  [VB.NET] الأمر (الكود) loop للميديا بلاير visualist2015 2 1,751 17-11-15, 03:08 PM
آخر رد: visualist2015
  [VB.NET] أريد كود إذا كان الوقت كذا والتاريخ كذا فنفذ هذا الأمر ؟ التفاصيل في الداخل PMTB01 2 2,684 02-07-15, 01:45 PM
آخر رد: PMTB01
Exclamation [سؤال] سبب عدم رغبتي في تعلم الفيجوال دون نت قد تجدون الأمر مضحك sniperjawadino 14 7,261 15-12-14, 12:11 AM
آخر رد: sniperjawadino
  التراجع والاعاده فى بيئه الدوت نت مبرمج بلا حدود 0 1,550 14-07-13, 05:36 PM
آخر رد: مبرمج بلا حدود

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم