Telegram Web
يمكنك اضافة العدد الذي تريد من الاختصارات داخل الدالة
تابع المثال التالي قمنا باضافة اختصار اخر ويقوم بعمليه اخرى غير طباعة رسالة


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.F))
{
MessageBox.Show("What the Ctrl+F?");
return true;
}

if (keyData == ( Keys.B))
{
this.BackColor = Color.Red;

return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}


عند الضغط على الزر B في الكيبورد يتم تغيير لون الخلفية للفورم
مقال جميل ورائع 👇🏻


ما هي البرمجة؟ فهم معنى البرمجة وأهميتها


إذا كان لديك شغف بالحوسبة وترغب في الاستفادة بشكل أفضل من الوقت الذي تقضيه أمام شاشة الكومبيوتر، فإنك قد اتخذت قرارًا يمكن أن يحدث ثورة في حياتك.

إذا كان لديك فكرة إنشاء تطبيق جديد أو لعبة أو موقع ويب أو برنامج، فإنك قد لا تعرف من أين تبدأ، وذلك لأن الموضوع واسعٌ للغاية وذو جوانب مختلفة لا تعرف أي من الطرق الكثيرة التي يجب اتباعها وتحتاج إليها لتنفيذ مشروعك.

مهما كان السبب الذي يدفعك إلى البدء في تعلم البرمجة، يجب أن تكون واضحًا وأن تبدأ في تعلم الأساسيات، خطوة واحدة في كل مرة. وإذا قررت تعلم كيفية البرمجة، فيجب عليك أولًا معرفة ما هي البرمجة.




ما هو تعريف البرمجة؟

لنبدأ بالتعريف اليدوي، في علوم الكمبيوتر، تُعرّف البرمجة على أنها عملية كتابة التعليمات (الرموز) التي يتعين تنفيذها بواسطة الكمبيوتر، أو حتى الهاتف الذكي، وبشكلٍ عام، تستخدم البرمجة لكي يتم إدخال التعليمات إلى أي جهاز إلكتروني في العالم، حتى الخلاط الإلكتروني!

للقيام بذلك، فإن الأشياء التي تحتاج إلى معرفتها هي: لغة البرمجة والمفاهيم الأساسية لكيفية البرمجة. والهدف من هذا الدليل هو تعليمك كليهما.

على الرغم من أنها قد تبدو معقدة، لكن البرمجة ليست صعبة. إذا كنت تعتقد أنها كذلك، فهذا لأنك اتبعت النهج الخاطئ.

غالبًا ما نعتقد أن كتابة البرنامج أمر تقني للغاية، حيث يجب أن ندرس اللغة، ونتذكر الأوامر عن ظهر قلب، وهذا يمثل جهد حقيقي ينبغي أن نبذله.

لكن هذا ليس الجزء الصعب!

كل هذه الأشياء سوف تتعلمها وتتقنها بشكل طبيعي بعد أن تعرف المفاهيم الأساسية، لكن الشيء الصعب والأكثر أهمية، هو فهم كيفية التفكير.

إذن ما هي البرمجة، إنها مثل الفلسفة، باختصار هي طريقة للتفكير قبل كتابة الكود.


لماذا من المفيد تعلم البرمجة؟

تتيح لك البرمجة إمكانات ومزايا رائعة لا تشمل العمل فقط في المجال التقني، فهي ستؤثر على كل شيء تفكر فيه، وكما قلنا، إنها تشبه الفلسفة أي أنها طريقة للتفكير المنطقي والمتسلسل الذي يهدف إلى حل المشكلات:


. قم بها بنفسك

تعلمك البرمجة التفكير وحل المشكلات، حتى تلك التي تبدو أكثر تعقيدًا وبدون حل. هذا لأنها تعلمك أن تنظر إلى المشاكل من منظور آخر، وأن تعالجها بطريقة مختلفة وأكثر تخطيطية، وتقسيم المشاكل الأكثر تعقيدًا والمستحيلة على ما يبدو إلى العديد من المشكلات الأصغر والأبسط.

هل قرأت يومًا عرض عمل يتطلب حل المشكلات والتفكير النقدي ومهارات التفكير الحسابية؟ باختصار، تعلم البرمجة يمنحك كل هذا، لكن ليس هذا أفضل شيء … الآن سنتحدث عن أشياء أروع!

يمكن لأي شخص طرح فكرة أو تطبيق ثوري أو لعبة أو خدمة ويب، ولكن ما يهم حقًا هو من يحصل على هذه الفكرة ويستفيد منها.

البرمجة تتيح لك القيام بكل ذلك بيديك، تكتب الكود الذي يعطي شكلًا لما تفكر فيه. يمكنك إنشاء وتدمير وتغيير كل ما قمت به كما تشاء، كما لو أنك تملك قوة خارقة.
ان شاء الله موضوع اليوم سوف يكون على هذا الشكل
طبعاً قد يظن البعض ان الذي في الشكل هو ملصق Lable
اداة lable لاتسطيع ان تضعها بهذا الشكل او اي اداة اخرى
برمجة تطبيقات الويندوز C# Programming
ان شاء الله موضوع اليوم سوف يكون على هذا الشكل طبعاً قد يظن البعض ان الذي في الشكل هو ملصق Lable اداة lable لاتسطيع ان تضعها بهذا الشكل او اي اداة اخرى
بسم الله نبدا شرح موضوع الشكل السابق


بعد ان تقوم بإنشاء مشروع
اذهب الى قائمة الاحداث للفورم الحدث Paint اضغط عليه double Click

قم بكتابة الكود التالي داخل دالة الحدث
private void Form4_Paint(object sender, PaintEventArgs e)
{

int x = 40, y = 50;


Font f = new Font("Andalus", 20, FontStyle.Bold);
e.Graphics.RotateTransform(40);
e.Graphics.TranslateTransform(x, y, System.Drawing.Drawing2D.MatrixOrder.Append);
e.Graphics.DrawString("Hello", f, Brushes.Green, x, y);


}
شرح الكود السابق :
في البداية عرفنا المتغيرين x , y سوف نستخدمهن في تحديد موقع النص يعني اين تريد وضع النص

بعد ذالك قمنا بإنشاء اوبجكت من الكلاس Font وهذا الاوبجكت الذي سوف نرسله الى دالة DrawString

e.Graphics.RotateTransform(40);
في الكود السابق استخدمنا الدالة RotateTransform
وهي تقوم بتطبيق التدوير المحدد على ماسوف تقوم برسمه على الفورم مثلا في الكود السابق سوف يتم التدوير بالقيمة التي تم وضعها في الدالة .

e.Graphics.TranslateTransform(x, y, System.Drawing.Drawing2D.MatrixOrder.Append);

الدالة TranslateTransform تقوم بتغيير اصل نظام الاحداثيات x,y
اما المعداد MatrixOrder يقوم بترتيب عمليات تحويل المصفوفة
أي ان هو يتم تدوير النص على انها مصفوفة

القيمة Append يتم تطبيق العملية الجديدة بعد العملية القديمة.

القيمة Prepend يتم تطبيق العملية الجديدة قبل العملية القديمة.



اخر سطر وهو استدعاء الدالة DrawString
e.Graphics.DrawString("Hello", f, Brushes.Green, x, y);

لكي تقوم بكتابة النص في الفورم
الوسائط التي تاخذها هذه الدالة
النص الذي تريد ان يظهر على الفورم
نوع خط النص
لون الفرشاة
موقع ظهور النص
برمجة تطبيقات الويندوز C# Programming
بسم الله نبدا شرح موضوع الشكل السابق بعد ان تقوم بإنشاء مشروع اذهب الى قائمة الاحداث للفورم الحدث Paint اضغط عليه double Click قم بكتابة الكود التالي داخل دالة الحدث private void Form4_Paint(object sender, PaintEventArgs e) { int…
تابع الشرح

ملاحظة :

ماذا لو انت تريد ان تضع اكثر من نص في الفورم هل سوف تقوم بتكرار الكود اكثر من مرة بهذا الشكل

private void Form4_Paint(object sender, PaintEventArgs e)
{

int x = 40, y = 50;


Font f = new Font("Andalus", 20, FontStyle.Bold);
e.Graphics.RotateTransform(40);
e.Graphics.TranslateTransform(x, y, System.Drawing.Drawing2D.MatrixOrder.Append);
e.Graphics.DrawString("Hello", f, Brushes.Green, x, y);



x += 50;

e.Graphics.RotateTransform(50);
e.Graphics.TranslateTransform(x, y, System.Drawing.Drawing2D.MatrixOrder.Append);
e.Graphics.DrawString("Wellcome", f, Brushes.Green, x, y);

}
الطريقة تعتبر صحيحه بس سوف تجعل الكود الخاص بك كثييير وتتعب نفسك بهذه الطريقة ما رايك ان تقوم باختصار الكود وتقوم بعمل دالة تؤدي هذه المهمه
مثال :

public void Draw(Graphics g ,int a,string str,int x,int y,Font f , Brush b)
{
System.Drawing.Drawing2D.GraphicsState state = g.Save();
g.RotateTransform(a);
g.TranslateTransform(x, y, System.Drawing.Drawing2D. MatrixOrder.Append);
g.DrawString(str, f, b, 0, 0);

g.Restore(state);
}

private void Form4_Paint(object sender, PaintEventArgs e)
{

int x = 40, y = 50;


Font f = new Font("Andalus", 20, FontStyle.Bold);

Draw(e.Graphics, 50, "YEMEN", x, y, f, Brushes.Green);
x += 50;
Draw(e.Graphics, 60, "C# Windows Forms", x, y, f, Brushes.Red);
x += 100; y += 50;
Draw(e.Graphics, 60, "Hello World", x, y, f = new Font("Traditional Arabic", 20), Brushes.Blue);
}
لاحظ كيف قمنا بعمل دالة تحمل وسائط التي استخدمناها في الكود السابق
الكلاس GraphicsState يحفظ الحالة الحالية لهذه الرسومات ويحدد الحالة المحفوظة باستخدام GraphicsState.


انتهى ................

https://www.tgoop.com/CsharpWindowsForm
👍1
بسم الله الرحمن الرحيم


موضوع اليوم :
عن كيف يتم تغيير لون صورة تضيفها من جهازك كما في الشكل
👍1
برمجة تطبيقات الويندوز C# Programming
بسم الله الرحمن الرحيم موضوع اليوم : عن كيف يتم تغيير لون صورة تضيفها من جهازك كما في الشكل
الشرح :

في البداية ستحتاج الى إضافة 2 أدوات pictureBox
pictureBox1 تحتوي على الصورة الاصلية بدون إضافة تأثيرات الألوان
pictureBox2 يتم حفظ الصورة مع التأثير الذي طرأ عليها

قم بتعديل خاصية Size Mode لكلا الاداتين السابقتين الى StretchImage
لكي يتم عرض الصورة بالكامل

قم بإضافة صورة لاداة صندوق الصور 1 اثناء التصميم وايضاً تستطيع إضافة صورة اثناء التنفيذ وذلك عنطريق أداة openFileDialog
ولاكن سوف نقوم باضافتها اثناء التصميم لكي نختصر الشرح والكود

الان قم بإضافة الكود التالي الى دالة الحدث Load التابعة للفورم

Bitmap bmp = new Bitmap(pictureBox1.Image);
int width = bmp.Width;
int height = bmp.Height;

Bitmap RedBmp = new Bitmap(bmp);

for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
//get pixel value
Color p = bmp.GetPixel(x, y);

//extract ARGB value from p
int a = p.A;
int r = p.R;
int g = p.G;
int b = p.B;



//set red image pixel
RedBmp.SetPixel(x, y, Color.FromArgb(a, r, 0, 0));
}
}
pictureBox2.Image = RedBmp;


لتغيير لون اخر غير الأحمر مثلا الأزرق
RedBmp.SetPixel(x, y, Color.FromArgb(a, 0, 0, b));
ولكي تقوم بعمل مثل هذا التأثير على الصور
برمجة تطبيقات الويندوز C# Programming
ولكي تقوم بعمل مثل هذا التأثير على الصور
قم بإضافة هذه الاسطر الى الكود

r = 255 - r;
g = 255 - g;
b = 255 - b;

وايضاً قم بالتعديل في الدالة التالية

RedBmp.SetPixel(x, y, Color.FromArgb(a, r, g, b));



كود هذا الشكل


Bitmap bmp = new Bitmap(pictureBox1.Image);
int width = bmp.Width;
int height = bmp.Height;

Bitmap RedBmp = new Bitmap(bmp);

for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
//get pixel value
Color p = bmp.GetPixel(x, y);

//extract ARGB value from p
int a = p.A;
int r = p.R;
int g = p.G;
int b = p.B;




r = 255 - r;
g = 255 - g;
b = 255 - b;
//set red image pixel
RedBmp.SetPixel(x, y, Color.FromArgb(a, r, g, b));
}
}
pictureBox2.Image = RedBmp;
👍1
اختصارات وحيل لا تعرفها في الفيجوال استوديو



اليوم إن شاء الله سوف نشرح بعض الحيل في الفيجوال استوديو قد تعلم ببعض هذه الاختصارات وبعضها جديدة عليك

هذه الحيل والاختصارات تسهل من عمل المبرمج وتختصر عليه الوقت والجهد تابع معي
سوف نبدا بالاختصارت الاسهل والتي يعرفها البعض منكم
لاحظ هذه الكلمات المحجوزة
for , forr , class ,struct ,prop,propfull,if,while,do,ctor
وغيرها الكثير من الكلمات ولاكن سوف نشرح على هذه الكلمات لكي توضح الفكرة

عندما تكتب احد هذه الكلمات ثم تضغط على زر Tab مرتين سوف يقوم المترجم بتجهيز البنية لأي كلمة تريد

مثلا for
عندما تكتب for وتضغط زر Tab مرتين سوف يقوم المترجم بعمل

for (int i = 0; i < length; i++)
{

}

بنفس الطريقة مع باقي الكلمات
Class
سوف يقوم بعمل
class MyClass
{

}


Ctor عندما تقوم بكتابة هذا الرمز بداخل كلاس او تركيب وتضغط زر Tab سوف يقوم بعمل دالة بناء لهذا الكلاس او التركيب

مثال :
class MyClass
{
public MyClass()
{

}
}

الاختصار prop عند كتابتها والضغط على Tab
يتم عمل خاصية بهذا الشكل

public int MyProperty { get; set; }

الاختصار propfull
يتم عمل خاصية وانشاء متغير بهذا الشكل

private int myVar;

public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
الاختصار forr
يتم عمل دوارة بهذا الشكل
for (int i = length - 1; i >= 0; i--)
{

}

نفس الطريق مع باقي الكلمات و if الشرطية

ملاحظة للتذكير الضغط على زر Tap مرتين


الان نأتي الى الطرق الاحترافية للاختصارات والحيل


الاختصار 1

class Students
{

string name;

}

لديك كلاس خاص بالطلاب ويوجد متغير لاسم الطالب بعد ذالك سوف تقوم بعمل خاصية من نوع string لكي تقوم باستقبال اسم الطالب وطباعة اسم الطالب

لكي تختصر وقت كتابة هذه الخاصية وتجعل المترجم هو من يقوم بالكتابة بدل عنك

فقط قم بالنقر على اسم المتغير name بالماوس
واضغط على الاختصار التالي
Ctrl+R+E
ثم اضغط Apply من النافذة التي سوف تظهر وسوف يقوم بكتابة الخاصية
الكلاس بعد عمل الخاصية

class Students
{

string name;

public string Name
{
get
{
return name;
}

set
{
name = value;
}
}


الاختصار 2

عندما تريد ان تجعل سطر برمجي او عده اسطر برمجية comment تجعلهن تعليقات
قد تبدو عملية إضافة علامة // سهله في حاله كان سطر برمجي ماذا لو كان هناك العديد من الاسطر تريد ان تعملهن تعليقات

لكي تقوم بعمل اكثر من سطر برمجي تعليق فقط قم بتحديد هذه الاسطر واضغط على
اختصار ctrl+K+C
ولإزاله التعليق عن الاسطر التي بها علامة // فقط قم بتحديدها واضغط
Ctrl+K+U

الاختصار 3
عندما تقوم بتعريف متغيرتقوم بوضع الفاصلة المنقوطة ومن ثم تقوم بالانتقال الى السطر الثاني

الاختصار التالي يقوم بوضع فاصله منقوطه وينتقل تلقائيا الى السطر التالي Shift+Enter

الاختصار 4

عندما تقوم بتغيير اسم متغير وانت قد استخدمته في الكثير من الاسطر البرمجية
سوف تظهر أخطاء كثيرره بعدد مرات استخدام هذا المتغير سوف تصبح عملية تغيير الاسم
متعبه في جميع الاسطر

الاختصار التالي يقوم بتغييره في جميع الاسطر
انقر على اسم المتغير واضغط الاختصار التالي ctrl+R+R
تضغط على زر R مرتين ومن ثم قم بالضغط على apply


الاختصار 5

عندما تقوم بتغيير مكان تعريف متغير ما او سطر برمجي أي كان
قد تقوم بحذفه وتعريفه مرة أخرى في المكان الذي تريد او تقوم بعمل قص / لصق

الاختصار التالي يقوم بتحريك السطر الى أي مكان تريد

أولا قم بتحديد السطر الذي تريد تغيير مكانه ومن ثم قم بالضغط على زر
Alt+ ازرار سهم ↓ او ↑


الاختصار 6

لنفترض ان معك الاسطر البرمجية التالية
void Main() {
int val1 = 49, val2 = 90, val3 = 88;

double average;

average = (val1 + val2 + val3) / 3;
}
وتريد ان تحسب المتوسط في دالة من اجل تكن ترسل لها الوسائط بدل ما تكرر السطر الثالث

سوف تذهب وتقوم بعمل هذه الدالة

الاختصار التالي يقوم بعمل الدالة تلقائياً
أولا قم بتحديد السطر الذي قد تحتاجة اكثر من مرة وهو السطر الثالث في هذا المثال
بعد ان تحدد عليه اضغط على اختصار Ctrl+R+M
وسوف يتم تعديل الكود وعمل الدالة بهذا الشكل

void Main() {

int val1 = 49, val2 = 90, val3 = 88;

double average;

average = NewMethod(val1, val2, val3);
}
شرح خصائص


TextBox

يمكن استخدام اداة التحكم TextBox ، لإدخال البيانات أو للعرض
النص أثناء وقت التشغيل. ربما تكون هذه هي اداة التحكم الأكثر استخدامًا لأنه يمكن أن تكون تستخدم لكل من المدخلات والمخرجات. مثل معظم الكائنات الأخرى من فئة التحكم ،
خاصية النص (text)
يتم استخدام الخاصية للحصول على أو تعيين قيمة السلسلة في اداة التحكم. عادة ، سطر واحد من النص يظهر في TextBox ؛ ومع ذلك ، عن طريق تغيير خاصية MultiLine إلى true ،
يمكن أن يظهر TextBox عدة أسطر.هناك أيضًا خاصية ScrollBars
يتم استخدام هذه الخاصية مع تعيين خاصية MultiLine إلى true ، يمكنك ذلك
عيّن ما إذا تمت إضافة أشرطة التمرير الرأسية أو الأفقية. يمكنك أيضًا تقييد عدد الأحرف التي يمكن أن يعرضها TextBox بكتابة قيمة لـ خاصيةMaxLength

يتم استخدام خاصية PasswordChar مع TextBox وهي ممتعة للعمل معها. بواسطة
عند كتابة حرف واحد مثل العلامة النجمية (*) ، يمكنك إخفاء الأحرف التي تم إدخالها بواسطة المستخدم. هذه الخاصية مثالية لإنشاء أو إدخال بيانات مثل كلمات المرور
تعمل الخاصية فقط عند تعيين الخاصية MultiLine إلى false.
خاصية أخرى يمكن تعيين الخاصية ، CharacterCasing ، بحيث يتم استرداد جميع الأحرف بواسطة الخاصية TextBox.Text يتم تحويل إلى أحرف كبيرة أو صغيرة.

خاصية CharacterCasing ، تقوم بتحديد قيمة تحدد حالة الاحرف التي يتم إدخالها حروف كبيرة او صغيرة او normal
• الخاصية AcceptsReturn
تقوم بتعيين قيمة تشير إلى ما إذا كان الضغط على ENTER في اداة تحكم TextBox متعدد الخطوط ينشئ سطرًا جديدًا من النص أو ينشط الزر الافتراضي للنموذج.
اذا كانت قيمة الخاصية تساوي true فانهو سوف ينشئ سطرًا جديدًا
اذا كانت تساوي false فإنهو يتم تنشيط الزر الافتراضي للفورم

بمعنى :
اذا كان لديك في الفورم الأدوات التالية
textbox
خصائصها :
multiline = true
AcceptsReturn = false

واداة Button تقوم بطباعة رسالة في الحدث Click

و الخاصية AcceptButton التابعة للفورم تساوي button1

فإنهو عندما يقوم المستخدم بالكتابة في مربع النص ويريد النزول الى سطر جديد ويضغط الزر Enter لن يتم النزول الى سطر جديد وسوف يتم تنفيذ الرسالة الموجودة في دالة الحدث Click الخاصة بالزر

ولحل هذه المشكلة قم بجعل الخاصية AcceptsReturn = true
• الخاصية AcceptsTab
تقوم بتعيين قيمة تشير إلى ما إذا كان الضغط على المفتاح TAB في اداة تحكم مربع نص متعدد الأسطر يؤدي إلى عمل مسافة بين النص في اداة التحكم او يتم نقل التركيز إلى عنصر التحكم التالي

توضيح :
يعني اذا كانت قيمة الخاصية تساوي true فإنهو عند الضغط على مفتاح Tab يتم عمل مسافة للنص في أداة مربع النص
واذا كانت تساوي false فانهو يتم نقل التركيز الى أداة تحكم أخرى حسب ترتيب خاصية tab index

قيمتها الافتراضية false



• الخاصية Modified
تقوم بتعيين قيمه تشير الى ان أداة مربع النص قد تم تعديل النص بداخلها من قبل المستخدم او تم إعادة تعيين محتوايته اخر مره

مثلاً اذا كان لديك برنامج يقوم بحفظ بيانات الطلاب مع امكانيه التعديل على هذه البيانات او حذفها

فمثلاً لو أراد المستخدم ان يقوم بتعديل اسم طالب
ففي حالة كان اسم الطالب مختلف عما كان عليه من قبل ففي هذه الحالة
يجب تنبيه المستخدم في ما اذا كان يريد حفظ البيانات بعد ان تم التعديل عليها



• الخاصية HideSelection

تقوم بتعيين قيمة تشير إلى ما إذا كان النص المحدد في اداة تحكم مربع النص يظل محددًا عندما تفقد اداة التحكم التركيز.

عندما تكون قيمه الخاصية تساوي true فإنه يتم إخفاء النص المحدد عندما تفقد أداة مربع النص التركيز

واذا كانت تساوي false فإن النص المحدد يظل محدداً حتى عندما تفقد الأداة التركيز

قيمتها الافتراضيه تساوي true
المقصود ب فقدان التركيز أي انك تنتقل الى أداة أخرى تستخدم أداة أخرى في الفورم




• الخاصية SelectionStart

تقوم بتعيين نقطة البداية لمؤشر الكتابة في النص

فمثلاً لو كان معك أداة مربع النص في الفورم

وكتب هذا السطرين في دالة الحدث Load
textBox1.Text = "hello";
textBox1.SelectionStart = 2;
سوف يظهر مؤشر الكتابة بين حرف e و l



• الخاصية WordWrap
الإشارة إلى ما إذا كان اداة تحكم مربع نص متعدد الأسطر يلتف الكلمات تلقائيًا إلى بداية السطر التالي عند الضرورة.


هذه الخاصية تقوم بالانتقال الى السطر التالي عندما يصل المستخدم بالكتابة الى نهايه مربع النص يتم الانتقال الى سطر جديد في حاله كانت تساوي true اما اذا كانت تساوي false فإنه سوف يتم الكتابة في سطر واحد دون الانتقال الى السطر التالي


ملاحظة مهمة :
اذا تم تعيين قيمه الخاصية الى true فإن الخاصية ScrollBar= Horizontal
لن تعمل أي ان شريط التمرير الافقي لن يظهر


• الخاصية ScrollBar
هذه الخاصية تقوم بتعيين أي أشرطة التمرير يجب أن تظهر في اداة تحكم TextBox متعدد الخطوط.


مثلاً القيم التي تاخذها هذه الخاصية هي ثلاث قيم
شريط تمرير افقي Horizontal
شريط تمرير عمودي Vertical
او كلاهما Both
او لايظهر أي منهما none


تذكر !

لن يتم عرض أشرطة التمرير الأفقية إذا تم تعيين خاصية WordWrap إلى true ، بغض النظر عن قيمة الخاصية ScrollBars.




• الخاصية multi line
تسمح لإداة مربع النص ان تكون متعددة الاسطر
في حالة كانت تساوي true

قيمتها الافتراضية تساوي false



• الخاصية SelectionLength
الحصول على عدد الاحرف المحددة في مربع النص


• الخاصية ShortCutEnabled
تعيين قيمة تشير إلى ما إذا كانت الاختصارات المحددة ممكّنة.
الاختصارت مثل اختصار النسخ القص التحديد التراجع الخ....


• الخاصية textLength
الحصول على طول النص في اداة التحكم textbox


• الخاصية ReadOnly
تعيين قيمة تشير إلى ما إذا كان النص في مربع النص للقراءة فقط.
ListBox
ListBox هو ItemsControl ،
مما يعني أنه يمكن أن يحتوي على مجموعة من الكائنات من أي نوع (مثل السلسلة أو الصورة أو panel)

يمكن رؤية أكثر من عنصر واحد في ListBox ، على عكس ComboBox ، الذي يحتوي على العنصر المحدد فقط المرئي
تحدد الخاصية SelectionMode إمكانية تحديد أكثر من عنصر واحد في ListBox في المرة الواحدة.

تحدد الخاصية SelectionMode عدد العناصر التي يمكن للمستخدم تحديدها في وقت واحد. يمكنك تعيين الخاصية إلى one (الافتراضي) أو متعدد (MultiSimple) أو ممتد.( MultiExtended)

إنشاء ListBox

هناك طريقتان لإنشاء اداة تحكم ListBox في نماذج Windows. إما أنه يمكننا استخدام مصمم النماذج لإنشاء اداة تحكم في وقت التصميم أو يمكننا استخدام فئة ListBox لإنشاء اداة تحكم في وقت التشغيل.

إنشاء ListBox في وقت التصميم

في شرحنا الأول ، سنقوم بإنشاء اداة تحكم ListBox في وقت التصميم باستخدام مصمم النماذج.

لإنشاء اداة تحكم ListBox في وقت التصميم ، نقوم ببساطة بسحب اداة تحكم ListBox من Toolbox وإسقاطه إلى نموذج في Visual Studio. بعد سحب ListBox وإسقاطه في نموذج ، يبدو ListBox كما في الشكل 1. بمجرد وجود ListBox في النموذج ، يمكنك تحريكه وتغيير حجمه باستخدام الماوس وتعيين خصائصه وأحداثه.





الطريقة الثانية لانشاء أداة االتحكم ListBox (برمجياً)

نقوم بإنشاء اوبجكت من الفئة ListBox وتعيين خصائص الأداة ومن ثم نضيف الأداة للفورم
ListBox listBox1 = new ListBox();
في الخطوة التالية ، يمكنك تعيين خصائص اداة تحكم ListBox. يقوم مقتطف الكود التالي بتعيين خصائص الموقع والعرض والارتفاع ولون الخلفية ولون المقدمة والنص والاسم والخط في ListBox:
listBox1.Location = new System.Drawing.Point(12, 12);
listBox1.Name = "ListBox1";
listBox1.Size = new System.Drawing.Size(245, 200);
listBox1.BackColor = System.Drawing.Color.Orange;
listBox1.ForeColor = System.Drawing.Color.Black;

بمجرد أن يصبح اداة التحكم ListBox جاهزًا بخصائصه ، فإن الخطوة التالية هي إضافة ListBox إلى الفورم. للقيام بذلك ، نستخدم الأسلوب this.Controls.Add الذي يضيف اداة تحكم ListBox إلى عناصر تحكم الفورم ويعرضه في الفورم بناءً على موقع اداة التحكم وحجمه. يضيف مقتطف التعليمة البرمجية التالية اداة تحكم ListBox إلى الفورم الحالي:

this.Controls.Add(listBox1);

خصائص ListBox

أسهل طريقة لتعيين الخصائص هي من نافذة الخصائص. يمكنك فتح نافذة الخصائص بالضغط على F4 أو بالنقر بزر الماوس الأيمن على عنصر تحكم واختيار عنصر القائمة "خصائص". تبدو نافذة الخصائص كما في الشكل 2.





• خاصية Name
تمثل الخاصية Name اسمًا فريدًا لعنصر تحكم ListBox. يتم استخدامه للوصول إلى عنصر التحكم في التعليمات البرمجية. يقوم مقتطف الرمز التالي بتعيين اسم عنصر التحكم ListBox ونصه
listBox1.Name = "ListBox1";




• خصائص الموقع والحجم Location and Size
تأخذ خاصية الموقع نقطة تحدد موضع بدء ListBox في الفورم. يمكنك أيضًا استخدام الخاصيتين Left و Top لتحديد موقع عنصر التحكم من الزاوية العلوية اليسرى من الفورم. تحدد الخاصية Size حجم عنصر التحكم. يمكننا أيضًا استخدام خصائص العرض والارتفاع بدلاً من خاصية الحجم. يقوم مقتطف الكود التالي بتعيين خصائص الموقع والعرض والارتفاع لاداة تحكم ListBox:

listBox1.Location = new System.Drawing.Point(12, 12);
listBox1.Size = new System.Drawing.Size(245, 200);


• الخاصية Font
تمثل الخاصية Font خط نص اداة تحكم ListBox. إذا قمت بالنقر فوق خاصية الخط في نافذة الخصائص ، فسترى اسم الخط وحجمه وخيارات الخط الأخرى. يقوم مقتطف الكود التالي بتعيين خاصية الخط في وقت التشغيل:

listBox1.Font = new Font("Georgia", 16);


• الخاصية Items
يتم استخدام خاصية العناصر لإضافة العناصر والعمل بها في ListBox. يمكننا إضافة عناصر إلى ListBox في وقت التصميم من نافذة الخصائص بالنقر على مجموعة العناصر كما ترى في الشكل






عندما تنقر على Collection ، ستظهر لك نافذة محرر مجموعة السلسلة حيث يمكنك كتابة السلاسل النصية
سيصبح كل سطر تمت إضافته إلى هذه المجموعة عنصر ListBox. أضفت أربعة عناصر كما ترى من الشكل


بعد ان تقوم بإضافة العناصر سوف تبدو أداة ListBox في الفورم بهذا الشكل



يمكنك إضافة بعض العناصر للListBox في وقت التشغيل

مثال الكود التالي

listBox1.Items.Add("C#");
listBox1.Items.Add("C++");
listBox1.Items.Add("JAVA");
listBox1.Items.Add("PYTHON");
👍1
إحضار كافة عناصر ListBox

للحصول على جميع العناصر ، نستخدم خاصية العناصر وننتقل خلالها لقراءة جميع العناصر. يتكرر مقتطف الكود التالي عبر جميع العناصر ويضيف محتويات العنصر إلى StringBuilder ويعرضها في MessageBox:

private void button1_Click(object sender, EventArgs e)
{
StringBuilder str = new StringBuilder();
foreach (var item in listBox1.Items)
{
str.Append(item.ToString());
str.Append(" ");}
MessageBox.Show(str.ToString());}

يمكنك الحصول على قيمة عنصر من عناصر listbox
واسنادها لمتغير اخر

مثال :
private void button1_Click(object sender, EventArgs e)
{
listBox1.SelectedIndex = 2;
string str = listBox1.Items[listBox1.SelectedIndex].ToString();

MessageBox.Show(str);
}

استخدمنا في السطر الأول داخل الدالة الخاصية SelectedIndex
لتحديد عنصر من عناصر listbox سوف يتم تحديد العنصر 3
وبعد ذلك يتم اسناد العنصر المحدد للمتغير str ومن ثم يقوم بطباعته

يمكنك حذف السطر الأول وتحديد عنصر في السطر الثاني
كالتالي :

string str = listBox1.Items[listBox1.SelectedIndex=2].ToString();



• الخاصية SelectionMode
تحدد الخاصية SelectionMode كيفية تحديد العناصر في ListBox. يمكن أن تكون قيمة SelectionMode واحدة من قيم تعداد SelectionMode الأربع التالية:

لا شيء: لا يمكن تحديد عنصر.
واحد: يمكن تحديد عنصر واحد فقط.
MultiSimple: يمكن تحديد عناصر متعددة.
MultiExtended: يمكن تحديد عناصر متعددة ، ويمكن للمستخدم استخدام مفاتيح SHIFT و CTRL والسهم لإجراء التحديدات
لتحديد عنصر في ListBox ، يمكننا استخدام الدالة SetSelect التي تأخذ فهرس عنصر وقيمة صواب أو خطأ حيث تمثل القيمة الحقيقية العنصر الذي سيتم تحديده.

يقوم مقتطف الكود التالي بتعيين ListBox للسماح بتحديد متعدد وتحديد العنصرين الثاني والثالث في القائمة:

listBox1.SelectionMode = SelectionMode.MultiSimple;
listBox1.SetSelected(1, true);
listBox1.SetSelected(2, true);

يمكننا مسح جميع العناصر المحددة عن طريق استدعاء طريقة ClearSelected ، كما في الكود التالي:

listBox1.ClearSelected();
ويمكن حذف جميع عناصر listBox كما في الكود التالي
listBox1.Items.Clear();

كيفية تعطيل تحديد العنصر في ListBox؟

فقط قم بتعيين الخاصية SelectionMode إلى none


فرز عناصر ListBox

إذا تم تعيين الخاصية Sorted إلى true ، فسيتم فرز عناصر ListBox. يقوم مقتطف الكود التالي بفرز عناصر ListBox:
listBox1.Sorted = true;


البحث عن عناصر في ListBox

يتم استخدام الدال FindString للعثور على سلسلة أو سلسلة فرعية في ListBox. يعثر مقتطف الكود التالي على سلسلة في ListBox ويحددها إذا تم العثور عليها:

private void button1_Click(object sender, EventArgs e)
{
listBox1.ClearSelected();

int index = listBox1.FindString(textBox1.Text);

if (index < 0)
{
MessageBox.Show("Item not found.");

}
else
{
listBox1.SelectedIndex = index;
}
}


ListBox SelectedIndexChanged Event Hander

يتم تشغيل الحدث SelectedIndexChanged عند تغيير تحديد العنصر في ListBox. يمكنك إضافة معالج الأحداث باستخدام نافذة الاحداث واختيار رمز الحدث والنقر المزدوج على SelectedIndexChanged


يحدد مقتطف الكود التالي هذه الأحداث وينفذها ومعالجات الأحداث الخاصة بها. يمكنك استخدام هذا الرمز نفسه لتنفيذ حدث في وقت التشغيل.
listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
MessageBox.Show(listBox1.SelectedItem.ToString());


}


الخاصية DataSource

يتم استخدام الخاصية DataSource لربط مجموعة من العناصر ListBox.

مقتطف الكود التالي هو مثال بسيط لربط البيانات حيث يرتبط Array String بقائمة ListBox


listBox1.Items.Clear();
string[] str = new string[]
{
"C","Ruby","PHP","Java Script"
};
listBox1.DataSource = str;
اسعد الله مساكم الاخوة و الاخوات

فقط للتوضيح

عندما تلاحظ في الشرح بعض المصطلحات قد يختلط عند البعض معنى المصطلح لذالك سوف نوضح لكم بعض هذه المصطلحات

نموذج — فورم
عنصر تحكم — اداة تحكم
مقتطف الشفرة او مقتطف الكود — تعني سطر كود

هذه الاكثر المصطلحات التي يمكن ان تجدها في الشرح السابق والقادم ان شاء الله


بالتوفيق
شرح اداة

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 إلى النموذج الحالي ويعرضه عند النقر بزر الماوس الأيمن فوق النموذج.
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(@"مسار الصورة"), };
2025/07/12 09:13:18
Back to Top
HTML Embed Code: