لاحظ في البداية ان العناصر التي نضيفها للقائمة هي عباراة عن كائنات من نوع ToolStripMenuItem
بهذه الطريقة يمكنك تهيئه جميع خصائص العنصر كيف ما تريد الكود السابق يقوم بإنشاء عنصر مع إضافة صورة له ولكي تضيف الكائن للقائمة
ContextMenuStrip1.Items.Add(item);
من خلال الطريقة السابقة يمكنك معالجة احداث العناصر منفصله يعني كل عنصر له داله الحدث الخاصة به
بهذه الطريقة يمكنك تهيئه جميع خصائص العنصر كيف ما تريد الكود السابق يقوم بإنشاء عنصر مع إضافة صورة له ولكي تضيف الكائن للقائمة
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
بهذا الشكل
الشكل في pdf
اذا كانت true
تظهر بهذا الشكل
الشكل في pdf
النقطة الحمراء كي تفرق بين مساحة الصورة الأولى والثانية
لذالك عندما تكون هذه الخاصية true يتم تكبير مساحة الجهة اليسرى للقائمة ,
في هذه الحالة يمكنك إضافة صورة للعنصر في القائمة وايضاً علامة اختيار,
علامة اختيار تعني تحديد علامة صح على العنصر تظهر وتختفي عند الضغط على العنصر.
ولكي تقوم بتفيعل علامة الاختيار تضغط على عنصر من عناصر القائمة وتغير قيمة الخاصية Checked الى true .
ولاكن في حالة كانت الخاصية ShowCheckMargin تساوي false سوف يتم عمل القائمة كما في الشكل الأول , و خاصية Checked سوف تظهر علامة اختيار في حالة عدم وجود صورة للعنصر اما اذا كان هناك صورة للعنصر لن تعمل الخاصية Checked .
• الخاصية ShowImageMargin
بنفس فكرة الخاصية السابقة ولاكن تظهر مساحة الصور لاحظ الشكل الأول من الخاصية السابقة , المساحة المظلله على اليسار هي خاصة بالصور وذلك لان هذه الخاصية قيمتها الافتراضية تساوي true,
اذا غيرت قيمه هذه الخاصية الى false فانهو لن تظهر مساحة تظع فيها صورة للعنصر او علامة اختيار .
ولاكن في حالة كانت الخاصية ShowCheckMargin تساوي true و الخاصية ShowImageMargin تساوي false سوف تظهر مساحة كما في الشكل الأول ,
واذا عملت صورة للعنصر في القائمة سوف تظهر الصورة في حالة كانت خاصية Checked تساوي false اما اذا غيرت قيمتها الى true سوف يتم إخفاء الصور,
وإظهار علامة الاختيار بدل من الصورة.
خصائص أداة 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
بهذا الشكل
الشكل في pdf
اذا كانت true
تظهر بهذا الشكل
الشكل في pdf
النقطة الحمراء كي تفرق بين مساحة الصورة الأولى والثانية
لذالك عندما تكون هذه الخاصية true يتم تكبير مساحة الجهة اليسرى للقائمة ,
في هذه الحالة يمكنك إضافة صورة للعنصر في القائمة وايضاً علامة اختيار,
علامة اختيار تعني تحديد علامة صح على العنصر تظهر وتختفي عند الضغط على العنصر.
ولكي تقوم بتفيعل علامة الاختيار تضغط على عنصر من عناصر القائمة وتغير قيمة الخاصية Checked الى true .
ولاكن في حالة كانت الخاصية ShowCheckMargin تساوي false سوف يتم عمل القائمة كما في الشكل الأول , و خاصية Checked سوف تظهر علامة اختيار في حالة عدم وجود صورة للعنصر اما اذا كان هناك صورة للعنصر لن تعمل الخاصية Checked .
• الخاصية ShowImageMargin
بنفس فكرة الخاصية السابقة ولاكن تظهر مساحة الصور لاحظ الشكل الأول من الخاصية السابقة , المساحة المظلله على اليسار هي خاصة بالصور وذلك لان هذه الخاصية قيمتها الافتراضية تساوي true,
اذا غيرت قيمه هذه الخاصية الى false فانهو لن تظهر مساحة تظع فيها صورة للعنصر او علامة اختيار .
ولاكن في حالة كانت الخاصية ShowCheckMargin تساوي true و الخاصية ShowImageMargin تساوي false سوف تظهر مساحة كما في الشكل الأول ,
واذا عملت صورة للعنصر في القائمة سوف تظهر الصورة في حالة كانت خاصية Checked تساوي false اما اذا غيرت قيمتها الى true سوف يتم إخفاء الصور,
وإظهار علامة الاختيار بدل من الصورة.
👍1
الخاصيتين السابقتين الخاصات بالقائمة مرتبطات بخاصيتين من عناصر القائمة
هما .
Imageو Checked
• الخاصية ShowItemToolTips
تقوم بعرض تلميح للعنصر عندما تكون تساوي true وتكون خاصية ToolTipText للعنصر لاتساوي null أي غير فارغه .
يظهر التلميح عندما يكون مؤشر الماوس فوق العنصر.
• الخاصية RenderMode
تقوم هذه الخاصية بتحديد شكل القائمة
لاتحتاج الى شرح مفصل فقط انت قم بتغيير قيمها وستلاحظ الشكل الذي سوف يتم تغييره
لاحقاً سوف يتم شرح بعض الاحداث الخاصة بالاداة
...........................................
هما .
Imageو Checked
• الخاصية ShowItemToolTips
تقوم بعرض تلميح للعنصر عندما تكون تساوي true وتكون خاصية ToolTipText للعنصر لاتساوي null أي غير فارغه .
يظهر التلميح عندما يكون مؤشر الماوس فوق العنصر.
• الخاصية RenderMode
تقوم هذه الخاصية بتحديد شكل القائمة
لاتحتاج الى شرح مفصل فقط انت قم بتغيير قيمها وستلاحظ الشكل الذي سوف يتم تغييره
لاحقاً سوف يتم شرح بعض الاحداث الخاصة بالاداة
...........................................
فقرة سؤال :
اذا قمت بإنشاء اداة قائمة السياق ContextMenuStrip
برمجيا وانتهيت من تجهيز خصائصها وربطها مع اداة تحكم فما هي الطرق التي من خلالها يتم إظهار الاداة في الفورم ؟
اذا قمت بإنشاء اداة قائمة السياق ContextMenuStrip
برمجيا وانتهيت من تجهيز خصائصها وربطها مع اداة تحكم فما هي الطرق التي من خلالها يتم إظهار الاداة في الفورم ؟
Anonymous Poll
39%
Controls.Add(ContextMenuStrip);
29%
ContextMenuStrip.Show();
10%
components.Add(ContextMenuStrip);
23%
2 و 3
برمجة تطبيقات الويندوز C# Programming
فقرة سؤال :
اذا قمت بإنشاء اداة قائمة السياق ContextMenuStrip
برمجيا وانتهيت من تجهيز خصائصها وربطها مع اداة تحكم فما هي الطرق التي من خلالها يتم إظهار الاداة في الفورم ؟
اذا قمت بإنشاء اداة قائمة السياق ContextMenuStrip
برمجيا وانتهيت من تجهيز خصائصها وربطها مع اداة تحكم فما هي الطرق التي من خلالها يتم إظهار الاداة في الفورم ؟
اجابة السؤال :
هو الاختيار رقم 4
بالنسبة لاداة ContextMenu يمكنك اضافتها للفورم عنطريق الدالة Show
وايضاً من خلال الخاصية components
وذلك لان الادوات التي تظهر اسفل النموذج تعتبر components
اما الادوات التي تظهر بداخل الفورم تعتبر Controls
هو الاختيار رقم 4
بالنسبة لاداة ContextMenu يمكنك اضافتها للفورم عنطريق الدالة Show
وايضاً من خلال الخاصية components
وذلك لان الادوات التي تظهر اسفل النموذج تعتبر components
اما الادوات التي تظهر بداخل الفورم تعتبر Controls
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 لكي لا يطول الشرح .
ايضاً يوجد فرق اخر بين الحدثين السابقين وهو ان الحدث 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
الاحداث :
• الحدث 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 لكي لا يطول الشرح .
ايضاً يوجد فرق اخر بين الحدثين السابقين وهو ان الحدث 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
ContextMenuStrip Control P&E.pdf
210.3 KB
شرح الاداة مع الخصائص والاحداث
بسم الله الرحمن الرحيم
موضوع اليوم : شرح الكلاس Random
الكلاس Random (عشوائي)
يستخدم لتوليد القيم العشوائية (اعداد , نصوص , الوان) وغيرها من القيم
سوف نشرح اليوم كيف تستخدم هذا الكلاس
سوف نبدأ بالامثلة السهله ومن ثم نشرح بعض الأمثلة المتقدمة
يتم انشاء اوبجكت من الكلاس Random
Random rand = new Random();
المثال الأول :
في هذا المثال سنقوم بعمل مصفوفه ارقام ومن ثم نقوم بطباعة عدد غير محدد أي بشكل عشوائي في دالة الحدث Click للButton
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
MessageBox.Show(rand.Next(0, arr.Length).ToString());
}
شرح المثال :
بعد ان قمنا بإنشاء اوبجكت عشوائي انشئنا مصفوفة تحوي 6 عناصر
ومن ثم قمنا بالطباعة لاحظ اننا استخدمنا الاوبجكت rand لكي نستخدم الدالة التابعة له next هذه الدالة تأخذ وسيطين الأول اصغر قيمه والثاني اكبر قيمه,
أي نقوم بحصر القيم التي سوف يتم اختيارها بشكل عشوائي فمثلاً لو قمنا بتغيير سطر الطباعة بهذا الشكل :
MessageBox.Show(rand.Next(2, arr.Length).ToString());
لاحظ اننا قمنا بتغيير قيمه الوسيط الأول الى 2 في هذه الحالة سوف يتم استبعاد العناصر 0 و 1 أي لن يتم اختيارهن بين القيم التي سوف يتم طباعتها بشكل عشوائي .
ايضاً لو تلاحظ في الأمثلة السابقة سوف يتم استبعاد العنصر الأخير الرقم 6 ,
ولكي تقوم بحصر جميع القيم في مصفوفة .
MessageBox.Show(rand.Next(0, arr.Length+1).ToString());
ايضاً تستطيع ان تقوم بطباعة قيمه من بين عده قيمه بدون ان تقوم بعمل مصفوفة فقط تقوم بإنشاء اوبجكت عشوائي ومن ثم تحدد من اين يبدا توليد القيمة وأين ينتهي .
مثال :
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
MessageBox.Show(rand.Next(0, 100).ToString());
}
• امثله على النصوص
ايضاص يمكنك استخدام الكلاس Random لاختيار قيم عشوائيه من مصفوفة string كما في المثال التالي
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
string[] str = new string[] { "C#", "C++", "Java", "C", "PHP"};
string s = str[rand.Next(0, str.Length)];
MessageBox.Show(s);
}
او كما في الكود التالي
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
string[] str = new string[] { "C#", "C++", "Java", "C", "PHP"};
int index = rand.Next(str.Length);
MessageBox.Show(str[index]);
}
امثلة متقدمة :
في المثال التالي سوف نقوم بعمل دالة تقوم بتوليد نصوص بشكل عشوائي ونقوم بإرسال للدالة طول النص الذي نريد ان تقوم بتوليد
مثال :
private static string RandomString(int length)
{
const string str = "abcdefghijklmnopqrstuvwxyz0123456789";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++)
{
string c = str[random.Next(0, str.Length)];
builder.Append(c);
}
return builder.ToString();
}
في المثال السابق قمنا بعمل متغير ثابت str يحتوي على جميع الاحرف الإنجليزية وايضاً الاعداد من 0 الى 9
ولكي تجعل الدالة تقوم بتوليد اعداد فقط قم بكتابة الاعداد من 0 الى 9
اما بالنسبة للكلاس StringBuilderسوف نوضحه في نهاية الموضوع وما الفرق بينه وبين الكلاس string
الان نستدعي الدالة من دالة الحدث Click
بهذه الطريقة :
private void button1_Click(object sender, EventArgs e)
{
label1.Text = RandomString(5);
MessageBox.Show(RandomString(5));
}
لاحظ انهو تم إضافة أداة lable كي يتم اسناد القيمة العشوائية لخاصية النص text الخاصة بالاداة lable
مثال كيفية استخراج سطر من ملف نصي بشكل عشوائي
لنفرض انك تريد ان تقوم بعمل لعبة اسئله مثل لعبة من سيربح المليون وتريد في كل مرة يلعبها المستخدم ان تتغير الأسئلة عن السابق
نقوم بعمل دالة تقوم بهذا العمل و نرسل لها مسار ملف txt
public string GetRandomLine(ref string file)
{
List<string> lines = new List<string>();
Random rnd = new Random();
موضوع اليوم : شرح الكلاس Random
الكلاس Random (عشوائي)
يستخدم لتوليد القيم العشوائية (اعداد , نصوص , الوان) وغيرها من القيم
سوف نشرح اليوم كيف تستخدم هذا الكلاس
سوف نبدأ بالامثلة السهله ومن ثم نشرح بعض الأمثلة المتقدمة
يتم انشاء اوبجكت من الكلاس Random
Random rand = new Random();
المثال الأول :
في هذا المثال سنقوم بعمل مصفوفه ارقام ومن ثم نقوم بطباعة عدد غير محدد أي بشكل عشوائي في دالة الحدث Click للButton
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
MessageBox.Show(rand.Next(0, arr.Length).ToString());
}
شرح المثال :
بعد ان قمنا بإنشاء اوبجكت عشوائي انشئنا مصفوفة تحوي 6 عناصر
ومن ثم قمنا بالطباعة لاحظ اننا استخدمنا الاوبجكت rand لكي نستخدم الدالة التابعة له next هذه الدالة تأخذ وسيطين الأول اصغر قيمه والثاني اكبر قيمه,
أي نقوم بحصر القيم التي سوف يتم اختيارها بشكل عشوائي فمثلاً لو قمنا بتغيير سطر الطباعة بهذا الشكل :
MessageBox.Show(rand.Next(2, arr.Length).ToString());
لاحظ اننا قمنا بتغيير قيمه الوسيط الأول الى 2 في هذه الحالة سوف يتم استبعاد العناصر 0 و 1 أي لن يتم اختيارهن بين القيم التي سوف يتم طباعتها بشكل عشوائي .
ايضاً لو تلاحظ في الأمثلة السابقة سوف يتم استبعاد العنصر الأخير الرقم 6 ,
ولكي تقوم بحصر جميع القيم في مصفوفة .
MessageBox.Show(rand.Next(0, arr.Length+1).ToString());
ايضاً تستطيع ان تقوم بطباعة قيمه من بين عده قيمه بدون ان تقوم بعمل مصفوفة فقط تقوم بإنشاء اوبجكت عشوائي ومن ثم تحدد من اين يبدا توليد القيمة وأين ينتهي .
مثال :
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
MessageBox.Show(rand.Next(0, 100).ToString());
}
• امثله على النصوص
ايضاص يمكنك استخدام الكلاس Random لاختيار قيم عشوائيه من مصفوفة string كما في المثال التالي
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
string[] str = new string[] { "C#", "C++", "Java", "C", "PHP"};
string s = str[rand.Next(0, str.Length)];
MessageBox.Show(s);
}
او كما في الكود التالي
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
string[] str = new string[] { "C#", "C++", "Java", "C", "PHP"};
int index = rand.Next(str.Length);
MessageBox.Show(str[index]);
}
امثلة متقدمة :
في المثال التالي سوف نقوم بعمل دالة تقوم بتوليد نصوص بشكل عشوائي ونقوم بإرسال للدالة طول النص الذي نريد ان تقوم بتوليد
مثال :
private static string RandomString(int length)
{
const string str = "abcdefghijklmnopqrstuvwxyz0123456789";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++)
{
string c = str[random.Next(0, str.Length)];
builder.Append(c);
}
return builder.ToString();
}
في المثال السابق قمنا بعمل متغير ثابت str يحتوي على جميع الاحرف الإنجليزية وايضاً الاعداد من 0 الى 9
ولكي تجعل الدالة تقوم بتوليد اعداد فقط قم بكتابة الاعداد من 0 الى 9
اما بالنسبة للكلاس StringBuilderسوف نوضحه في نهاية الموضوع وما الفرق بينه وبين الكلاس string
الان نستدعي الدالة من دالة الحدث Click
بهذه الطريقة :
private void button1_Click(object sender, EventArgs e)
{
label1.Text = RandomString(5);
MessageBox.Show(RandomString(5));
}
لاحظ انهو تم إضافة أداة lable كي يتم اسناد القيمة العشوائية لخاصية النص text الخاصة بالاداة lable
مثال كيفية استخراج سطر من ملف نصي بشكل عشوائي
لنفرض انك تريد ان تقوم بعمل لعبة اسئله مثل لعبة من سيربح المليون وتريد في كل مرة يلعبها المستخدم ان تتغير الأسئلة عن السابق
نقوم بعمل دالة تقوم بهذا العمل و نرسل لها مسار ملف txt
public string GetRandomLine(ref string file)
{
List<string> lines = new List<string>();
Random rnd = new Random();
int i = 0;
try
{
if (File.Exists(file))
{
StreamReader reader = new StreamReader(file);
while (!(reader.Peek() == -1))
lines.Add(reader.ReadLine());
i = rnd.Next(lines.Count);
reader.Close();
return lines[i].Trim();
}
else
{
return string.Empty;
}
}
catch (IOException ex)
{
MessageBox.Show("Error: " + ex.Message);
return string.Empty;}}
نشرح اكواد الدالة :
List<string> lines = new List<string>();
قائمة تحتوي على السطور
int i = 0;
متغير للاحتفاظ برقم السطر العشوائي
StreamReader reader = new StreamReader(file);
انشاء اوبجكت لقراءة الملف
while (!(reader.Peek() == -1))
للانتقال عبر كل سطر من ملفنا النصي
lines.Add(reader.ReadLine());
الحصول على رقم سطر عشوائي
reader.Close();
اغلاق الملف النصي
return lines[i].Trim();
الآن اعد نص السطر العشوائي
الان نستدعي الدالة
private void button1_Click(object sender, EventArgs e)
{
string path = " path file txt";
label1.Text = GetRandomLine(ref path);
}
المثال الأخير اختيار لون للفورم بشكل عشوائي
private void button1_Click(object sender, EventArgs e)
{
Random rnd = new Random();
Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
BackColor = randomColor;
}
الان عندما تقوم بالتنفيذ
في كل Click على الزر سوف يتم تغيير لون الفورم الى لون مختلف
انتهى.........
try
{
if (File.Exists(file))
{
StreamReader reader = new StreamReader(file);
while (!(reader.Peek() == -1))
lines.Add(reader.ReadLine());
i = rnd.Next(lines.Count);
reader.Close();
return lines[i].Trim();
}
else
{
return string.Empty;
}
}
catch (IOException ex)
{
MessageBox.Show("Error: " + ex.Message);
return string.Empty;}}
نشرح اكواد الدالة :
List<string> lines = new List<string>();
قائمة تحتوي على السطور
int i = 0;
متغير للاحتفاظ برقم السطر العشوائي
StreamReader reader = new StreamReader(file);
انشاء اوبجكت لقراءة الملف
while (!(reader.Peek() == -1))
للانتقال عبر كل سطر من ملفنا النصي
lines.Add(reader.ReadLine());
الحصول على رقم سطر عشوائي
reader.Close();
اغلاق الملف النصي
return lines[i].Trim();
الآن اعد نص السطر العشوائي
الان نستدعي الدالة
private void button1_Click(object sender, EventArgs e)
{
string path = " path file txt";
label1.Text = GetRandomLine(ref path);
}
المثال الأخير اختيار لون للفورم بشكل عشوائي
private void button1_Click(object sender, EventArgs e)
{
Random rnd = new Random();
Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
BackColor = randomColor;
}
الان عندما تقوم بالتنفيذ
في كل Click على الزر سوف يتم تغيير لون الفورم الى لون مختلف
انتهى.........
الفرق بين string و stringBuilder
string
غير قابلة للتغيير ، وتعني Immutable إذا قمت بإنشاء كائن string ، فلا يمكنك تعديله ، كما أنها تنشئ دائمًا كائنًا جديدًا من نوع string في الذاكرة.
مثال :
string strMyValue = "Hello Ali";
// إنشاء نسخة سلسلة جديدة بدلاً من تغيير السطر القديم
strMyValue += "How Are";
strMyValue += "You ??";
StringBuilder
قابل للتغيير ، مما يعني أنه إذا تم إنشاء كائن StringBuilder ، فيمكنك تنفيذ أي عملية مثل الإدراج أو الاستبدال أو الإلحاق بدون إنشاء كائن جديد في كل مرة.
StringBuilder sbMyValue = new StringBuilder("");
sbMyValue.Append("Hello Ali");
sbMyValue.Append("How Are You ??");
string strMyValue = sbMyValue.ToString();
MessageBox.Show(strMyValue);
string
غير قابلة للتغيير ، وتعني Immutable إذا قمت بإنشاء كائن string ، فلا يمكنك تعديله ، كما أنها تنشئ دائمًا كائنًا جديدًا من نوع string في الذاكرة.
مثال :
string strMyValue = "Hello Ali";
// إنشاء نسخة سلسلة جديدة بدلاً من تغيير السطر القديم
strMyValue += "How Are";
strMyValue += "You ??";
StringBuilder
قابل للتغيير ، مما يعني أنه إذا تم إنشاء كائن StringBuilder ، فيمكنك تنفيذ أي عملية مثل الإدراج أو الاستبدال أو الإلحاق بدون إنشاء كائن جديد في كل مرة.
StringBuilder sbMyValue = new StringBuilder("");
sbMyValue.Append("Hello Ali");
sbMyValue.Append("How Are You ??");
string strMyValue = sbMyValue.ToString();
MessageBox.Show(strMyValue);
بسم الله الرحمن الرحيم
شرح أداة التحكم Timer
أداة التحكم المؤقت (timer)
تقوم بإنشاء حدث بعد فاصل زمني محدد ، مع خيار إنشاء أحداث متكررة.
اي ان هذه الأداة مهمتها تنفيذ عمليه خلال مدة محددة او بعد كل فاصل زمني محدد .
هذه الأداة تقوم برفع حدث في التطبيق الخاص بك بعد انقضاء عدد المللي ثانية في خاصية الفاصل الزمني (Interval)
نشرح بالاكواد كي توضح الفكرة اكثر عن هذه الأداة.
هذه الأداة من الأدوات التي هي non visual أي غير مرئية في الفورم وتظهر اسفل الفورم .
يمكنك اضافتها للفورم من قائمة أدوات التحكم او برمجياً
الخصائص المهمه التابعة لهذه الأداة
الخاصية Enabled : هي المسئوله عن تفعيل الأداة او عدم تفعيلها قيمتها الافتراضيه هي false أي انك عندما تقوم بسحب الأداة للفورم تكون غير مفعله لو تقوم بعمل أي شي في الحدث Tick فإنه لن يحدث شي والسبب ان الخاصية Enabled تساوي false ولكي يعمل الحدث قم بجعل قيمه الخاصية الى true
الخاصية Interval
هذه الخاصية تأخذ قيمه من نوع int
من خلالها نحدد متى يحدث الحدث
فمثلاً اذا قمت بعمل قيمه للخاصيه كالتالي
timer1.Interval = 3000;
فهذا يعني سوف يتم تشغيل الحدث Tick بعد كل 3 ثواني
أي ان الف مللي ثانية يساوي ثانية واحدة
اذا اردت تنفيذ عمليه بالثواني كل ما عليك هو ان
ثانية * 1000
أي انك تضع عدد الثواني في المعادلة السابقة وتضربه في 1000
اما اذا اردت بالدقائق تكتب عدد الدقائق وتضربها في 60 في 1000
دقيقة * 60 * 1000
لكي تقوم بعمليه بعد 3 دقائق كل ماعليك فعله هو كالتالي
timer1.Interval = 3*60*1000;
الحدث Tick
الحدث تيك وهو الحدث الذي سوف يتم تنفيذ العمليه بداخله بعد مرور المدة الزمنية المحددة في الخاصية Interval.
هل تلاحظ الى مايدل اسم الحدث وكإن هو يشبه صوت عداد الثواني في ساعة الحائط .
الان سوف نشرح اكواد تمكنك من عمل أشياء جميله ورائعة في برنامجك من خلال هذه الأداة البسيطة
المثال الأول يقوم بتغيير لون الشاشة تلقائياً بعد مرور 3 ثواني في الحدث Tick
الكود:
private void timer1_Tick(object sender, EventArgs e)
{
Random rand = new Random();
Color randC = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
BackColor = randC;
}
المثال الثاني يقوم بتبديل الوان 2 ازرار الزر الأول لونه احمر والزر الثاني لونه اخضر سوف نقوم بتبديل الالون في ما بينهم كل ثانية .
الكود :
private void timer1_Tick(object sender, EventArgs e)
{
Button btn = new Button();
btn.BackColor = button1.BackColor;
button1.BackColor = button2.BackColor;
button2.BackColor = btn.BackColor;
}
مع العلم انهو تم تغيير قيمه الخاصية Interval الى 1000 (ثانية).
ملاحظة : كل ما كانت قيمة Interval اقل من ثانية تكون الأداة Timer سريعه .
بمعنى انك اذا عملت 100 للخاصية Interval فانها تعتبر 100 مللي ثاني أي جزء من الثانية.
المثال الثالث سوف نقوم بعمل قائمة منسدله تخرج من الجهه اليسرى
عندما يتم الضغط على زر القائمة .
لكي تقوم بتطبيق المثال هذا قم بإضافة الأدوات التاليه للفورم :
Panel1 خاصية Dock تساوي Top الون Orange
Panel2 خاصية Dock تساوي Left الون SteelBlue
Button ضعة في الجهه اليسرى للحاوية panel1 واسمه البرمجي btnMenu
Timer خاصية Enabled تساوي true و خاصية Interval تساوي 100
الان القائمة التي ستخرج من الجهه اليسرى هي panel2 قم بإضافة اليها بعص الازرار
التصميم النهائي سيبدو بشكل التالي :
اخر خطوة في التصميم قم بتعديل الخاصية Width التابعه Panel2 الى 0
كما في الشكل التالي
سوف تختفي القائمة بما تحتويه من ازرار لايهم سوف نقوم بإظهارها وإخفائها برمجيا.
الان بعد ان انتهينا من التصميم نبدأ بالبرمجة
سوف ندخل لاحداث الزر ونفتح دالة الحدث Click بعد ذلك نفتح الحدث Tick التابع لل Timer
الكود :
bool showMenu;
private void btnMenu_Click(object sender, EventArgs e)
{
if (panel2.Visible)
{
showMenu = false;
timer1.Start();
}
else
{
showMenu = true;
panel2.Show();
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (showMenu)
{
if (panel2.Width >= 155)
timer1.Stop();
panel2.Width += 14;
شرح أداة التحكم Timer
أداة التحكم المؤقت (timer)
تقوم بإنشاء حدث بعد فاصل زمني محدد ، مع خيار إنشاء أحداث متكررة.
اي ان هذه الأداة مهمتها تنفيذ عمليه خلال مدة محددة او بعد كل فاصل زمني محدد .
هذه الأداة تقوم برفع حدث في التطبيق الخاص بك بعد انقضاء عدد المللي ثانية في خاصية الفاصل الزمني (Interval)
نشرح بالاكواد كي توضح الفكرة اكثر عن هذه الأداة.
هذه الأداة من الأدوات التي هي non visual أي غير مرئية في الفورم وتظهر اسفل الفورم .
يمكنك اضافتها للفورم من قائمة أدوات التحكم او برمجياً
الخصائص المهمه التابعة لهذه الأداة
الخاصية Enabled : هي المسئوله عن تفعيل الأداة او عدم تفعيلها قيمتها الافتراضيه هي false أي انك عندما تقوم بسحب الأداة للفورم تكون غير مفعله لو تقوم بعمل أي شي في الحدث Tick فإنه لن يحدث شي والسبب ان الخاصية Enabled تساوي false ولكي يعمل الحدث قم بجعل قيمه الخاصية الى true
الخاصية Interval
هذه الخاصية تأخذ قيمه من نوع int
من خلالها نحدد متى يحدث الحدث
فمثلاً اذا قمت بعمل قيمه للخاصيه كالتالي
timer1.Interval = 3000;
فهذا يعني سوف يتم تشغيل الحدث Tick بعد كل 3 ثواني
أي ان الف مللي ثانية يساوي ثانية واحدة
اذا اردت تنفيذ عمليه بالثواني كل ما عليك هو ان
ثانية * 1000
أي انك تضع عدد الثواني في المعادلة السابقة وتضربه في 1000
اما اذا اردت بالدقائق تكتب عدد الدقائق وتضربها في 60 في 1000
دقيقة * 60 * 1000
لكي تقوم بعمليه بعد 3 دقائق كل ماعليك فعله هو كالتالي
timer1.Interval = 3*60*1000;
الحدث Tick
الحدث تيك وهو الحدث الذي سوف يتم تنفيذ العمليه بداخله بعد مرور المدة الزمنية المحددة في الخاصية Interval.
هل تلاحظ الى مايدل اسم الحدث وكإن هو يشبه صوت عداد الثواني في ساعة الحائط .
الان سوف نشرح اكواد تمكنك من عمل أشياء جميله ورائعة في برنامجك من خلال هذه الأداة البسيطة
المثال الأول يقوم بتغيير لون الشاشة تلقائياً بعد مرور 3 ثواني في الحدث Tick
الكود:
private void timer1_Tick(object sender, EventArgs e)
{
Random rand = new Random();
Color randC = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
BackColor = randC;
}
المثال الثاني يقوم بتبديل الوان 2 ازرار الزر الأول لونه احمر والزر الثاني لونه اخضر سوف نقوم بتبديل الالون في ما بينهم كل ثانية .
الكود :
private void timer1_Tick(object sender, EventArgs e)
{
Button btn = new Button();
btn.BackColor = button1.BackColor;
button1.BackColor = button2.BackColor;
button2.BackColor = btn.BackColor;
}
مع العلم انهو تم تغيير قيمه الخاصية Interval الى 1000 (ثانية).
ملاحظة : كل ما كانت قيمة Interval اقل من ثانية تكون الأداة Timer سريعه .
بمعنى انك اذا عملت 100 للخاصية Interval فانها تعتبر 100 مللي ثاني أي جزء من الثانية.
المثال الثالث سوف نقوم بعمل قائمة منسدله تخرج من الجهه اليسرى
عندما يتم الضغط على زر القائمة .
لكي تقوم بتطبيق المثال هذا قم بإضافة الأدوات التاليه للفورم :
Panel1 خاصية Dock تساوي Top الون Orange
Panel2 خاصية Dock تساوي Left الون SteelBlue
Button ضعة في الجهه اليسرى للحاوية panel1 واسمه البرمجي btnMenu
Timer خاصية Enabled تساوي true و خاصية Interval تساوي 100
الان القائمة التي ستخرج من الجهه اليسرى هي panel2 قم بإضافة اليها بعص الازرار
التصميم النهائي سيبدو بشكل التالي :
اخر خطوة في التصميم قم بتعديل الخاصية Width التابعه Panel2 الى 0
كما في الشكل التالي
سوف تختفي القائمة بما تحتويه من ازرار لايهم سوف نقوم بإظهارها وإخفائها برمجيا.
الان بعد ان انتهينا من التصميم نبدأ بالبرمجة
سوف ندخل لاحداث الزر ونفتح دالة الحدث Click بعد ذلك نفتح الحدث Tick التابع لل Timer
الكود :
bool showMenu;
private void btnMenu_Click(object sender, EventArgs e)
{
if (panel2.Visible)
{
showMenu = false;
timer1.Start();
}
else
{
showMenu = true;
panel2.Show();
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (showMenu)
{
if (panel2.Width >= 155)
timer1.Stop();
panel2.Width += 14;
}
else
{
if (panel2.Width <= 0)
{
panel2.Hide();
timer1.Stop();
}
panel2.Width -= 14;
}
}
شرح الكود :
bool showMenu;
في البداية قمنا بتعريف متغير من نوع bool هذا المتغير هو الذي سوف يحدد للتايمر في ما اذا كانت القائمة ظاهره او مخفيه.
عندما يقوم المستخدم بالضغط على الزر سوف يتم تنفيذ ما بداخل داله الحدث Click .
if (panel2.Visible)
سيبدا المترجم بفحص الشرط الأول في حاله كان صحيح سيدخل وينفذ مابداخل if الشرطية اما اذا كان غير صحيح سوف ينتقل الى else
else
{
showMenu = true;
panel2.Show();
timer1.Start();
}
سوف ينفذ الاسطر التي بداخل else اسندنا قيمه true للمتغير showMenu
ومن ثم قمنا بعرض الأداة panel2 و السبب انهو عند الضغط مرة أخرى على الزر يقوم بالدخول الى داله الحدث Click وينفذ الشرط الأول.
ومن ثم قمنا بتشغيل الtimer الان بعد السطر الأخير سوف يذهب الى دالة الحدث Tick .
if (showMenu)
{
if (panel2.Width >= 155)
timer1.Stop();
panel2.Width += 14;
}
عندما يفحص المترجم الجملة الشرطية if سيرى ان قيمه showMenu تساوي true لذالك سيتم تنفيذ ما بداخل هذا الشرط
بعد ذالك ينتقل الى السطر التالي ويجد ان هناك شرط اخر ويفحص الشرط سيجد ان الشرط غير صحيح لذالك سوف يتم ترك السطر الذي بعد الجمله الشرطيه لان الجملة الشرطيه التي لاتحوي على قوس بداية ونهاية فإن السطر البرمجي التالي يكون مرتبط بالشرط
بعد ذلك سوف يتم زيادة عرض الأداة panel2 (القائمة) بمقدار 14
سوف تتكرر هذه العملية حتى يصبح قيمة الخاصية Width اكبر من 155
عندها يتوقف الtimer .
ملاحظة : يتم تكرار العملية السابقة في كل 100 مللي ثانية
الان المؤقت توقف والقائمة تم إظهارها في الفورم.
الان عندما يقوم المستخدم بالضغط على القائمة مرة اخرى سوف تختلف العمليه أي انهو سوف يتم تنفيذ الاكواد الخاصة بإخفاها .
سوف ينفذ الشرط الأول في دالة الحدث Click ومن ثم يقوم بإسناد قميه المتغير المنطقي الى false , ومن ثم يقوم بتشغيل timer بعد ذلك سوف يتم تنفيذ الاكواد بداخل الدالة Tick التي تقوم بإخفاء القائمة.
ملاحظة حول أداة Timer عندما تقوم بإنشائها برمجياً فإنك لاتحتاج الى الى اضافتها الى الفورم يتم اضافتها تلقائيا فقط قم بتعديل خاصية Enabled الى true
مثال على انشاء اوبجكت من نوع Timer
Timer t = new Timer();
نهاية الشرح.....
إن شاء الله في موضوع منفصل سوف نشرح كيف تقوم بعمل تأثيرات حركية (انيمشن) بإستخدام أداة Timer
else
{
if (panel2.Width <= 0)
{
panel2.Hide();
timer1.Stop();
}
panel2.Width -= 14;
}
}
شرح الكود :
bool showMenu;
في البداية قمنا بتعريف متغير من نوع bool هذا المتغير هو الذي سوف يحدد للتايمر في ما اذا كانت القائمة ظاهره او مخفيه.
عندما يقوم المستخدم بالضغط على الزر سوف يتم تنفيذ ما بداخل داله الحدث Click .
if (panel2.Visible)
سيبدا المترجم بفحص الشرط الأول في حاله كان صحيح سيدخل وينفذ مابداخل if الشرطية اما اذا كان غير صحيح سوف ينتقل الى else
else
{
showMenu = true;
panel2.Show();
timer1.Start();
}
سوف ينفذ الاسطر التي بداخل else اسندنا قيمه true للمتغير showMenu
ومن ثم قمنا بعرض الأداة panel2 و السبب انهو عند الضغط مرة أخرى على الزر يقوم بالدخول الى داله الحدث Click وينفذ الشرط الأول.
ومن ثم قمنا بتشغيل الtimer الان بعد السطر الأخير سوف يذهب الى دالة الحدث Tick .
if (showMenu)
{
if (panel2.Width >= 155)
timer1.Stop();
panel2.Width += 14;
}
عندما يفحص المترجم الجملة الشرطية if سيرى ان قيمه showMenu تساوي true لذالك سيتم تنفيذ ما بداخل هذا الشرط
بعد ذالك ينتقل الى السطر التالي ويجد ان هناك شرط اخر ويفحص الشرط سيجد ان الشرط غير صحيح لذالك سوف يتم ترك السطر الذي بعد الجمله الشرطيه لان الجملة الشرطيه التي لاتحوي على قوس بداية ونهاية فإن السطر البرمجي التالي يكون مرتبط بالشرط
بعد ذلك سوف يتم زيادة عرض الأداة panel2 (القائمة) بمقدار 14
سوف تتكرر هذه العملية حتى يصبح قيمة الخاصية Width اكبر من 155
عندها يتوقف الtimer .
ملاحظة : يتم تكرار العملية السابقة في كل 100 مللي ثانية
الان المؤقت توقف والقائمة تم إظهارها في الفورم.
الان عندما يقوم المستخدم بالضغط على القائمة مرة اخرى سوف تختلف العمليه أي انهو سوف يتم تنفيذ الاكواد الخاصة بإخفاها .
سوف ينفذ الشرط الأول في دالة الحدث Click ومن ثم يقوم بإسناد قميه المتغير المنطقي الى false , ومن ثم يقوم بتشغيل timer بعد ذلك سوف يتم تنفيذ الاكواد بداخل الدالة Tick التي تقوم بإخفاء القائمة.
ملاحظة حول أداة Timer عندما تقوم بإنشائها برمجياً فإنك لاتحتاج الى الى اضافتها الى الفورم يتم اضافتها تلقائيا فقط قم بتعديل خاصية Enabled الى true
مثال على انشاء اوبجكت من نوع Timer
Timer t = new Timer();
نهاية الشرح.....
إن شاء الله في موضوع منفصل سوف نشرح كيف تقوم بعمل تأثيرات حركية (انيمشن) بإستخدام أداة Timer
السلام عليكم ورحمه الله
كيف احوالكم الاخوة و الاخوات اعضاء القناة نتمنى لكم دوام الصحة و العافية
نحب ان نعتذر منكم عن توقف النشر في الآونه الاخيره وذلك لظروف خاصة
ونعدكم ب افضل مواضيع ودروس البرمجة و ان تكون هذه القناة هي افضل المصادر في تعليم كل مايخص بالبرمجة بلغة السي شارب ✨
كيف احوالكم الاخوة و الاخوات اعضاء القناة نتمنى لكم دوام الصحة و العافية
نحب ان نعتذر منكم عن توقف النشر في الآونه الاخيره وذلك لظروف خاصة
ونعدكم ب افضل مواضيع ودروس البرمجة و ان تكون هذه القناة هي افضل المصادر في تعليم كل مايخص بالبرمجة بلغة السي شارب ✨
برمجة تطبيقات الويندوز C# Programming pinned «السلام عليكم ورحمه الله كيف احوالكم الاخوة و الاخوات اعضاء القناة نتمنى لكم دوام الصحة و العافية نحب ان نعتذر منكم عن توقف النشر في الآونه الاخيره وذلك لظروف خاصة ونعدكم ب افضل مواضيع ودروس البرمجة و ان تكون هذه القناة هي افضل المصادر في تعليم كل مايخص…»
برمجة تطبيقات الويندوز C# Programming
السلام عليكم ورحمه الله كيف احوالكم الاخوة و الاخوات اعضاء القناة نتمنى لكم دوام الصحة و العافية نحب ان نعتذر منكم عن توقف النشر في الآونه الاخيره وذلك لظروف خاصة ونعدكم ب افضل مواضيع ودروس البرمجة و ان تكون هذه القناة هي افضل المصادر في تعليم كل مايخص…
فقط تنويه اننا لم نتوقف عن النشر ولن نتوقف إن شاء الله 😊
اليوم إن شاء الله سوف نشرح عن اداة RadioButton زر الاختيار