আমি আমার প্রকল্পে পূর্বাবস্থায় ফিরিয়ে আনার জন্য কমান্ড প্যাটার্ন ব্যবহার করার চেষ্টা করেছি
public abstract class Command
{
protected Form Receiver { set; get; }
protected HtmlElement Element { set; get; }
abstract public void ReDo();
abstract public void UnDo();
public Command(Form receiver)
{
this.Receiver = receiver;
}
}
class AddElementCmd : Command
{
public AddElementCmd(HtmlElement elem, Form receiver)
: base(receiver)
{
Element = elem;
}
public override void ReDo()
{
((FormEdit)Receiver).AddElement(Element,false);
}
public override void UnDo()
{
((FormEdit)Receiver).DelElement(Element, false);
}
}
class DelElementCmd : Command
{
public DelElementCmd(HtmlElement elem, Form receiver)
: base(receiver)
{
Element = elem;
}
public override void ReDo()
{
((FormEdit)Receiver).DelElement(Element, false);
}
public override void UnDo()
{
((FormEdit)Receiver).AddElement(Element, false);
}
}
বাস্তবায়নের AddElementকমান্ড FormEdit।
public void AddElement(HtmlElement elem, bool isNew = true)
{
IHTMLElement2 dom = elem.DomElement as IHTMLElement2;
if (isNew)
{
Command cmd = new AddElementCmd(elem, this);
Undo.Push(cmd);
Redo.Clear();
}
// some codes here....
if (showAlltoolStripButton.Checked)
{
dom.runtimeStyle.visibility = "hidden";
}
else if (showSelectionToolStripButton.Checked)
{
dom.runtimeStyle.visibility = "visible";
}
}
...
The Undoএবং Redostacks মধ্যে সংরক্ষণ করা হয় FormMainশ্রেণী এবং সম্পাদক ফর্ম প্রেরণ করা হয়।
public Stack<Command> Undo = new Stack<Command>();
public Stack<Command> Redo = new Stack<Command>();
....
FormEdit editor = new FormEdit ();
editor.Browser = webBrowser1;
editor.addedElements = addedElements;
editor.restoreElements = restoreElements;
editor.Undo = Undo;
editor.Redo = Redo;
কোনও নতুন FormEditব্যবহারকারী যখন রিডো বা পূর্বাবস্থায়িত বোতামে ক্লিক করেন, তখন সংশ্লিষ্ট ফাংশনটি FormEditসম্পাদন করা হয়, তবে আমি কমান্ডের এই রিসিভারটি যাচাই করেছিলাম যে কমান্ডটি প্রথমে তৈরি হয়েছিল এবং এখন তা নিষ্পত্তি হয়েছে। আমি আশা করি যে প্রোগ্রামটি একটি ত্রুটি বাড়িয়েছে, তবে মনে হচ্ছে এটি Commandবস্তুটি পুরানো ফর্মটির জন্য একটি রেফারেন্স সঞ্চয় করে এবং এর ফলে দুর্ব্যবহার ঘটে।
অতএব, আমি মনে করি যে কমান্ডগুলির মূল ফর্ম বা ওয়েব ব্রাউজার নিয়ন্ত্রণের জন্য আমার অবশ্যই একটি ধারাবাহিক রিসিভার খুঁজে পেতে হবে, যার কমান্ডগুলি নিজের মতো করে একই সময়ের সাথে জীবনযাপন করবে। তবে তবুও আমার কাছে কমান্ড সম্পর্কিত কিছু নিয়ন্ত্রণে অ্যাক্সেস থাকা উচিত।
Commandবস্তু গ্রহণের জন্য কমান্ড কার্যকারিতা কার্যকর করার সেরা স্থানটি কোথায় ? অথবা স্ট্যাক থেকে পপড কমান্ডের সাথে নতুন ফর্ম সংযুক্ত করার অন্য কোনও উপায়।
Receiverপ্রতিটি কমান্ডের অবজেক্টের সেট করতে সক্ষম হওয়া উচিত , আমি এটি করতে যাচ্ছি।