ContextMenuStrip | شرح اداة قائمة السياق ContextMenuStrip
ContextMenuStrip Control
يوفر عنصر التحكم ContextMenuStrip وظائف قوائم السياق و تعرف قائمة السياق أيضًا بالقائمة المنبثقة. تظهر قائمة السياق عند النقر بزر الماوس الأيمن
على نموذج أو على عنصر تحكم.
إنشاء قائمة سياق
لإنشاء عنصر تحكم ContextMenuStrip في وقت التصميم ، ما عليك سوى سحب عنصر تحكم ContextMenuStrip وإفلاته من Toolbox إلى نموذج في Visual
Studio. بعد سحب وإفلات ContextMenuStrip في نموذج ، تتم إضافة ContextMenuStrip1 إلى النموذج وتبدو بالشكل 1. بمجرد وجود ContextMenuStrip في النموذج ، يمكنك إضافة عناصر القائمة وتعيين خصائصها وأحداثها. إذا لاحظت
في الشكل 1 ، فإن العنصر الأول من ContextMenuStrip يحتوي على نص اكتب هنا. يمكنك بالفعل البدء في الكتابة هنا
إذا لاحظت في الشكل 2 ، اكتب اثنين من عناصر القائمة. بمجرد
تحديد عنصر قائمة ، سترى تلقائيًا مناطق عناصر القائمة الفرعية قابلة للتحرير ويمكنك
الاستمرار في الوصول إلى العديد من المستويات التي تريدها. أقوم بإضافة عنصري قائمة
وعنصري قائمة فرعية.
يمكننا أيضًا إنشاء قوائم السياق في وقت التشغيل. على الرغم
من أنه يمكنك إنشاء ContextMenuStrip في وقت التشغيل ، فمن المستحسن
إنشاء وقت التصميم ثم تعيين الخصائص والأساليب في وقت التشغيل.
الخطوة الأولى لإنشاء ContextMenuStrip ديناميكي هي إنشاء مثيل لفئة ContextMenuStrip.
ينشئ مقتطف التعليمات البرمجية التالي كائن تحكم ContextMenuStrip.
ContextMenuStrip ContextMenuStrip1 = new ContextMenuStrip();
في الخطوة التالية ، يمكنك تعيين خصائص عنصر تحكم ContextMenuStrip.
يقوم مقتطف التعليمات البرمجية التالي بتعيين خصائص الخلفية ولون المقدمة والنص والاسم
ونوع الخط لـ ContextMenuStrip.
ContextMenuStrip1.BackColor
= Color.OrangeRed;
ContextMenuStrip1.ForeColor = Color.Black;
ContextMenuStrip1.Text = "File Menu";
ContextMenuStrip1.Font = new Font("Georgia", 16);
الان نقوم بإضافة عناصر الى قائمة السياق لكي
تظهر عند الضغط بزر الماوس الأيمن
ContextMenuStrip1.Items.Add("New");
ContextMenuStrip1.Items.Add("Open");
ContextMenuStrip1.Items.Add("Exit");
بمجرد أن يصبح عنصر التحكم ContextMenuStrip جاهزًا بخصائصه ، فإن الخطوة التالية هي إضافة ContextMenuStrip إلى نموذج. للقيام بذلك ، قم أولاً بتعيين خاصية ContextMenuStrip ثم استخدم استدعاء الأسلوب Show لعرض ContextMenuStrip.
يضيف مقتطف التعليمات البرمجية التالي عنصر تحكم ContextMenuStrip إلى النموذج الحالي ويعرضه عند النقر بزر الماوس الأيمن فوق النموذج.
يضيف مقتطف التعليمات البرمجية التالي عنصر تحكم ContextMenuStrip إلى النموذج الحالي ويعرضه عند النقر بزر الماوس الأيمن فوق النموذج.
this.ContextMenuStrip = ContextMenuStrip1;
ContextMenuStrip1.Show();
الان بعد اضافه قائمة السياق للفورم ستظهر عند الضغط بزر الماوس الأيمن على
الفورم بهذا الشكل
الان عند ما تقوم بالضغط على أي عنصر من عناصر القائمة لن يحدث شيء لانهو
لم يتم برمجة احداث هذه الأداة
الكود التالي يقوم بإضافة حدث ItemClicked
ContextMenuStrip1.ItemClicked += new ToolStripItemClickedEventHandler(MYToolStripMenuItem);
بعد ان تقوم بكتابة السطر السابق قم بالضغط على Ctrl+.
واختار Generate Method لكي يتم توليد الدالة تلقائياً
ستبدو الدالة التي تم إنشائها كالتالي
private void
MYToolStripMenuItem(object sender, ToolStripItemClickedEventArgs e)
{
throw new NotImplementedException();
}
الان انت لاتعرف لأي عنصر قمت بعمل دالة الحدث هذه ؟
طبعاً الحدث هذا سوف يكون لجميع العناصر قد تستغرب مما اقصد
سوف نستخدم الخاصية ClickedItem لكي يتم
تحديد أي العناصر تم الضغط عليه
تابع الشرح وسوف تفهم اكثر
قم بحذف السطر الموجود بالدالة واكتب الاسطر التاليه
private void
MyToolStripMenuItem(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem.Text=="Open")
{
MessageBox.Show("open");
}
if (e.ClickedItem.Text == "New")
{
MessageBox.Show("new");
}
if (e.ClickedItem.Text == "Exit")
{
this.Close();
}
}
هل استوعبت كيف سيتم تحديد أي
العناصر تم الضغط عليه وسوف يتم تنفيذ الشرط المتوافق مع النقرة
ويوجد طريقة أخرى لانشاء عناصر
للقائمة
ToolStripMenuItem item = new ToolStripMenuItem("Delete") { Image =Image.FromFile(@"مسار الصورة"), };
لاحظ في البداية ان العناصر التي
نضيفها للقائمة هي عباراة عن كائنات من نوع ToolStripMenuItem
بهذه الطريقة يمكنك تهيئه جميع
خصائص العنصر كيف ما تريد الكود السابق
يقوم بإنشاء عنصر مع إضافة صورة له ولكي تضيف الكائن للقائمة
ContextMenuStrip1.Items.Add(item);
من خلال الطريقة السابقة يمكنك
معالجة احداث العناصر منفصله يعني كل عنصر له داله الحدث الخاصة به
شكل اضافة عنصر مع ايقونه
خصائص أداة ContextMenuStrip
الخصائص Properties
·
الخاصية AutClose :
هذه الخاصية من نوع Boolean قيمتها الافتراضية true
تستخدم في ما اذا كنت تريد ان تبقى القائمة مفتوحه دائماً ام لا .
اذا كنت تريد ان تبقى مفتوحه قم بتعيين قيمه الخاصية AutoClose الى false .
ولاكن ليس من قائمة الخصائص اذا قمت بتعيين الخاصية هذه الى false
من قائمة الخصائص فإنها لن تظهر القائمة ابداً
عند التنفيذ وذلك بسبب انهو يتم اغلاق هذه الأداة عند ما يتم فقد التنشيط .
كي تجعل القائمة تبقى مفتوحه بعد ان تضغط على زر الماوس الأيمن ,
قم بكتابة الكود التالي بداخل دالة الحدث Load للفورم او دالة الحدث Opening
لهذه الأداة .
private void
Form4_Load(object sender, EventArgs e)
{
this.contextMenuStrip1.AutoClose ^= true;
}
لاحظ السطر الذي بداخل الدالة الان عند ما تقوم بالتنفيذ بعد ان تقوم
بالضغط على زر الماوس الأيمن , سوف تظهر القائمة ولاكن لن تستطيع اغلاقها بعد
ذالك.
اما بالنسبة للرمز ^ فهو يعني البوابة المنطقية XOR ,
ويمكنك استخدام رمز البوابة المنطقية في اكواد أخرى منها الشروط
وايضاً اذا سبق لك وقمت بعمل برنامج note pad او برنامج محاكي لبرنامج Word
فيوجد ازرار لجعل النص مائل او سميك او مسطر
وكل زر من هذه الازرار يقوم بعمليتين .
عند الضغط على زر جعل الخط مائل سوف يكون الخط مائل وعند الضغط عليه مرة
أخرى سوف يقوم بالكتابة بشكل عادي , كذالك بنفس الطريقة لباقي الازرار.
الان سوف نستعرض لك كودين يقوما بجعل الخط مائل احدهما يستخدم الرمز ^ و
الاخر بدون الرمز ^ ومن ثم نقوم بمواصله موضوع خصائص ContextMenu.
واعتذر منكم على الاطاله ولاكن يهمني ان تتعرفوا على كل كبيره وصغيره في
البرمجة بلغة السي شارب .
الكود الأول بدون الرمز ^ :
private void
btnItalic_Click(object sender,
EventArgs e)
{
richTextBox1.SelectionFont =
(!richTextBox1.SelectionFont.Italic) ? new Font(richTextBox1.SelectionFont,
richTextBox1.SelectionFont.Style | FontStyle.Italic) : new Font(richTextBox1.SelectionFont,
richTextBox1.SelectionFont.Style & ~FontStyle.Italic);
}
الكود الثاني باستخدام الرمز ^ :
private void
btnItalic_Click(object sender,
EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Italic);
}
هل لاحظت الفرق الكبير بين الاكواد السابقة مع ان كلاهما يقوما بنفس
العملية ,
ولاكن الكود الثاني اسهل ومختصر من الكود الأول.
اعتقد وضح سبب الإطالة في موضوع
رمز بوابة XOR
نعود الى موضوعنا
·
الخاصية DropShadowEnabled
خاصية من نوع bool قيمتها الافتراضية true .
تشير هذه الخاصية إلى ما إذا كان تأثير الظل
ثلاثي الأبعاد يظهر عند عرض القائمة ,
·
الخاصية ShowCheckMargin
هذه الخاصية تحدد قيمه تشير إلى ما إذا كانت مساحة علامة الاختيار تظهر على الحافة اليسرى من القائمة.
قيمتها الافتراضية false
بهذا الشكل
الشكل 1
اذا كانت true
تظهر بهذا الشكل
الشكل 2
النقطة الحمراء كي تفرق بين مساحة الصورة الأولى والثانية,
لذالك عندما تكون هذه الخاصية true يتم تكبير مساحة الجهة اليسرى للقائمة ,
في هذه الحالة يمكنك إضافة صورة للعنصر في القائمة وايضاً علامة اختيار,
علامة اختيار تعني تحديد علامة صح على العنصر تظهر وتختفي عند الضغط على
العنصر.
ولكي تقوم بتفيعل علامة الاختيار تضغط على عنصر من عناصر القائمة وتغير
قيمة الخاصية Checked
الى true
.
ولاكن في حالة كانت الخاصية ShowCheckMargin تساوي false سوف يتم عمل القائمة كما في الشكل الأول , و
خاصية Checked
سوف تظهر علامة اختيار في حالة عدم وجود صورة للعنصر اما اذا كان هناك صورة للعنصر
لن تعمل الخاصية Checked
.
·
الخاصية ShowImageMargin
بنفس فكرة الخاصية السابقة ولاكن تظهر مساحة
الصور لاحظ الشكل الأول من الخاصية
السابقة , المساحة المظلله على اليسار هي خاصة بالصور وذلك لان هذه الخاصية قيمتها
الافتراضية تساوي true,
اذا غيرت قيمه هذه الخاصية الى false
فانهو لن تظهر مساحة تظع فيها صورة للعنصر او
علامة اختيار .
ولاكن في حالة كانت الخاصية ShowCheckMargin تساوي true و الخاصية ShowImageMargin تساوي false سوف تظهر
مساحة كما في الشكل الأول ,
واذا عملت صورة للعنصر في القائمة سوف تظهر الصورة في حالة كانت خاصية Checked تساوي false
اما اذا غيرت قيمتها الى true سوف يتم إخفاء الصور,
وإظهار علامة الاختيار بدل من الصورة.
الخاصيتين السابقتين الخاصات بالقائمة مرتبطات بخاصيتين من عناصر القائمة
هما .
Image
و Checked
·
الخاصية ShowItemToolTips
تقوم بعرض تلميح للعنصر عندما تكون تساوي true وتكون خاصية ToolTipText للعنصر
لاتساوي null أي غير فارغه .
يظهر التلميح عندما يكون مؤشر الماوس فوق
العنصر.
·
الخاصية RenderMode
تقوم هذه الخاصية بتحديد شكل القائمة
لاتحتاج الى شرح مفصل فقط انت قم بتغيير
قيمها وستلاحظ الشكل الذي سوف يتم تغييره
ContextMenu Event
الاحداث :
· الحدث Opening
:
يعمل هذا الحدث قبل ما يتم فتح قائمة السياق أي عند ضغط على زر الماوس
الأيمن سوف يتم تفعيل هذا الحدث ومن ثم تظهر القائمة
مثال :
سنقوم بفتح دالة الحدث Opening لاداة ContextMenu
الكود :
private void
contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
MessageBox.Show("opening");
}
الكود السابق سوف يقوم بعرض رسالة messageBox ومن ثم تظهر القائمة.
· الحدث Opened
:
يحدث هذا الحدث عند ظهور القائمة , أي في نفس الوقت
مثال :
private void
contextMenuStrip1_Opened(object sender,
EventArgs e)
{
MessageBox.Show("opened");
}
توضيح للحدثين السابقين
في الكود الأول سوف يقوم بتنفيذ الحدث Opening
ولن تظهر القائمة الا بعد ان تقوم بإغلاق
الرسالة
اما الكود الثاني سوف يتم تفعيل الحدث Opened
وظهور القائمة في نفس الوقت
توضيح ! :
عندما اشرح الحدث واجعله يقوم
بتنفيذ عمليه في الشرح مثلا الاكواد السابقة
استخدمت messageBox
.
لايعني انهو لانستطيع ان نقوم
بعمليه غير الطباعة انت حرر تقوم بإي عمليه
تريد.
فقط استخدم messageBox لكي لا يطول الشرح .
فقط استخدم messageBox لكي لا يطول الشرح .
ايضاً يوجد
فرق اخر بين الحدثين السابقين وهو ان الحدث opening يوجد
لديه خاصية اسمها Cancel تقوم هذه الخاصية بإلغاء
ظهور القائمة عندما تساوي true
,
مثال
لكيفية استخدامها :
private void
contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
اما الحدث opened فلا يوجد لديه خاصية
·
الحدث ItemAdded :
يحدث هذا
الحدث عندما يتم إضافة عنصر للقائمة ليس في وقت التصميم وانما عندما يكون البرنامج
شغال , (الاحداث لا تتفاعل الا في وقت التشغيل).
مثال :
اضفنا
للفورم 2 أدوات تحكم textbox و Button
لكي نقوم
بإضافة عنصر جديد للقائمة .
الكود:
private void
button1_Click_1(object sender,
EventArgs e)
{
ToolStripMenuItem ts = new ToolStripMenuItem();
if (textBox1.Text != null)
{
ts.Text = textBox1.Text;
contextMenuStrip1.Items.Add(ts);
} }
private void
contextMenuStrip1_ItemAdded(object sender, ToolStripItemEventArgs e)
{
MessageBox.Show("item Added");
}
· الحدث ItemRemoved
يحدث هذا الحدث عندما يتم حذف عنصر من
القائمة .
· الحدث ItemClicked
يحدث عندما يتم الضغط على عنصر من عناصر
القائمة.
· الحدث Closing
يحدث عندما يتم اغلاق القائمة مثلا عند الضغط
بزر الماوس الأيمن في الفورم ستظهر القائمة وعند الضغط مرة أخرى بزر الماوس الأيمن
او الايسر سوف يعمل الحدث ومن ثم يتم إخفاء الفورم .
· الحدث Closed
هذا الحدث يعمل عندما يتم اغلاق القائمة في
نفس الوقت أي ان هذا الحدث عكس الحدث Opend والحدث Closing عكس الحدث Openig
تعليقات
إرسال تعليق