RadioButton Control
أداة Radio Button
وظيفة الأداة:
تمكن المستخدم من تحديد خيار واحد من مجموعة من الخيارات عند إقرانه مع عناصر تحكم RadioButton الأخرى.
تتشارك عناصر التحكم RadioButton و CheckBox في فئتها الأساسية مع عنصر التحكم Button، على الرغم من اختلاف مظهرها واستخدامها بشكل كبير عن اداة التحكم Button
عادةً ما تعرض أزرار الاختيار -<(RadioButton) نفسها على أنها علامة بها نقطة على يسارها ، والتي يمكن تحديدها أو عدم تحديدها. يجب عليك استخدام أزرار الاختيار عندما تريد منح المستخدم خيارًا بين العديد من الخيارات الحصرية المتبادلة. يمكن أن يكون مثال على ذلك ، إذا كنت تريد أن تسأل عن جنس المستخدم.
لتجميع مربعات الراديو معًا بحيث تنشئ وحدة منطقية واحدة ، يجب عليك استخدام عنصر تحكم GroupBox. او panel من خلال وضع اداة GroupBox. أولاً في نموذج ، ثم وضع عناصر تحكم RadioButton التي تحتاجها داخل حدود مربع المجموعة ، ستعرف عناصر تحكم RadioButton تغيير حالتها لتعكس أنه يمكن تحديد عنصر واحد فقط داخل مربع المجموعة. إذا لم تضعها في مربع مجموعة ، يمكن تحديد زر راديو واحد فقط في النموذج في أي وقت.
خصائص RadioButton
• الخاصية Appearance
يمكن عرض RadioButton كعلامة دائرية على يسارها أو وسطها أو يمينها ، أو كشكل الزر(Button). عندما يتم عرضه كزر ، سيظهر عنصر التحكم مضغوطًا في حال كان كان خاصية check تساوي true
• خاصية الفحص التلقائي AutoCheck
عندما تكون هذه الخاصية صحيحة ، يتم عرض علامة اختيار عندما ينقر المستخدم على زر الاختيار. عندما تكون خاطئة ، لا يتم عرض علامة الاختيار نهائياً
• الخاصية CheckAlign
باستخدام هذه الخاصية ، يمكنك تغيير محاذاة زر الاختيار. يمكن أن تكون اليسار والوسط واليمين.
• خاصية التحقق Check
يشير إلى حالة عنصر التحكم True يحتوي على علامة اختيار ، و false لايحتوي على علامة إختيار
أحداث RadioButton
ستستخدم عادة حدثًا واحدًا فقط عند العمل مع RadioButtons ، ولكن كما هو الحال دائمًا هناك العديد من الأحداث الأخرى التي يمكن الاشتراك فيها. سنغطي فقط اثنين في هذا الفصل ، والسبب الوحيد لذكر الحدث الثاني هو أن هناك فرقًا دقيقًا بين الاثنين يجب ملاحظته:
• حدث CheckChanged
يتم إرسال هذا الحدث عندما يتغير الاختيار الخاص بـ RadioButton. إذا كان هناك أكثر من عنصر تحكم RadioButton في الفورم أو داخل GroupBox او داخل panel، فسيتم إرسال هذا الحدث مرتين ، أولاً إلى عنصر التحكم ، الذي تم تحديده وأصبح الآن غير محدد ، ثم إلى عنصر التحكم الذي تم التحقق منه.
• الحدث Click
يتم إرسال هذا الحدث في كل مرة يتم فيها النقر فوق زر الراديو. هذا ليس مثل حدث التغيير ، لأن النقر فوق RadioButton مرتين أو أكثر على التوالي يغير الخاصية المحددة مرة واحدة - وفقط إذا لم يتم التحقق منها بالفعل.
ملاحظات :
يمكن لعنصر التحكم RadioButton عرض نص أو صورة أو كليهما.
عندما يحدد المستخدم زر إختيار واحد داخل مجموعة ، يتم مسح علامة التأشير عن الآخرين تلقائيًا. جميع عناصر التحكم RadioButton في حاوية معينة ، مثل نموذج ، تشكل مجموعة. لإنشاء مجموعات متعددة في نموذج واحد ، ضع كل مجموعة في الحاوية الخاصة بها ، مثل GroupBox أو Control Panel.
أي انك عندما تقوم بإضافة العديد من RadioButton الى الفورم
فإنها تعتبر مجموعة واحدة ولكي تفهم ماذا يعني ان تكون اداة RadioButton في مجموعة واحدة قم بعمل الآتي :
قم بإضافة اداتين او اكثر من أداة RadioButton للفورم
الان قم بالتنفيذ قم بالضغط على أي واحده من RadioButton سوف يتم التحديد عليها الان اضغط على أداة RadioButton أخرى سوف يتم التحديد على الأداة التي تم الضغط عليها وإخفاء التحديد عن الأداة التي تم الضغط عليها في البداية
تتمتع عناصر التحكم RadioButton و CheckBox بوظيفة مماثلة: فهي توفر خيارات يمكن للمستخدم تحديدها أو مسحها. الفرق هو أنه يمكن تحديد عناصر تحكم CheckBox المتعددة في نفس الوقت ، ولكن أزرار الخيارات تسمح بخيار واحد فقط في المجموعة الواحدة
أداة Radio Button
وظيفة الأداة:
تمكن المستخدم من تحديد خيار واحد من مجموعة من الخيارات عند إقرانه مع عناصر تحكم RadioButton الأخرى.
تتشارك عناصر التحكم RadioButton و CheckBox في فئتها الأساسية مع عنصر التحكم Button، على الرغم من اختلاف مظهرها واستخدامها بشكل كبير عن اداة التحكم Button
عادةً ما تعرض أزرار الاختيار -<(RadioButton) نفسها على أنها علامة بها نقطة على يسارها ، والتي يمكن تحديدها أو عدم تحديدها. يجب عليك استخدام أزرار الاختيار عندما تريد منح المستخدم خيارًا بين العديد من الخيارات الحصرية المتبادلة. يمكن أن يكون مثال على ذلك ، إذا كنت تريد أن تسأل عن جنس المستخدم.
لتجميع مربعات الراديو معًا بحيث تنشئ وحدة منطقية واحدة ، يجب عليك استخدام عنصر تحكم GroupBox. او panel من خلال وضع اداة GroupBox. أولاً في نموذج ، ثم وضع عناصر تحكم RadioButton التي تحتاجها داخل حدود مربع المجموعة ، ستعرف عناصر تحكم RadioButton تغيير حالتها لتعكس أنه يمكن تحديد عنصر واحد فقط داخل مربع المجموعة. إذا لم تضعها في مربع مجموعة ، يمكن تحديد زر راديو واحد فقط في النموذج في أي وقت.
خصائص RadioButton
• الخاصية Appearance
يمكن عرض RadioButton كعلامة دائرية على يسارها أو وسطها أو يمينها ، أو كشكل الزر(Button). عندما يتم عرضه كزر ، سيظهر عنصر التحكم مضغوطًا في حال كان كان خاصية check تساوي true
• خاصية الفحص التلقائي AutoCheck
عندما تكون هذه الخاصية صحيحة ، يتم عرض علامة اختيار عندما ينقر المستخدم على زر الاختيار. عندما تكون خاطئة ، لا يتم عرض علامة الاختيار نهائياً
• الخاصية CheckAlign
باستخدام هذه الخاصية ، يمكنك تغيير محاذاة زر الاختيار. يمكن أن تكون اليسار والوسط واليمين.
• خاصية التحقق Check
يشير إلى حالة عنصر التحكم True يحتوي على علامة اختيار ، و false لايحتوي على علامة إختيار
أحداث RadioButton
ستستخدم عادة حدثًا واحدًا فقط عند العمل مع RadioButtons ، ولكن كما هو الحال دائمًا هناك العديد من الأحداث الأخرى التي يمكن الاشتراك فيها. سنغطي فقط اثنين في هذا الفصل ، والسبب الوحيد لذكر الحدث الثاني هو أن هناك فرقًا دقيقًا بين الاثنين يجب ملاحظته:
• حدث CheckChanged
يتم إرسال هذا الحدث عندما يتغير الاختيار الخاص بـ RadioButton. إذا كان هناك أكثر من عنصر تحكم RadioButton في الفورم أو داخل GroupBox او داخل panel، فسيتم إرسال هذا الحدث مرتين ، أولاً إلى عنصر التحكم ، الذي تم تحديده وأصبح الآن غير محدد ، ثم إلى عنصر التحكم الذي تم التحقق منه.
• الحدث Click
يتم إرسال هذا الحدث في كل مرة يتم فيها النقر فوق زر الراديو. هذا ليس مثل حدث التغيير ، لأن النقر فوق RadioButton مرتين أو أكثر على التوالي يغير الخاصية المحددة مرة واحدة - وفقط إذا لم يتم التحقق منها بالفعل.
ملاحظات :
يمكن لعنصر التحكم RadioButton عرض نص أو صورة أو كليهما.
عندما يحدد المستخدم زر إختيار واحد داخل مجموعة ، يتم مسح علامة التأشير عن الآخرين تلقائيًا. جميع عناصر التحكم RadioButton في حاوية معينة ، مثل نموذج ، تشكل مجموعة. لإنشاء مجموعات متعددة في نموذج واحد ، ضع كل مجموعة في الحاوية الخاصة بها ، مثل GroupBox أو Control Panel.
أي انك عندما تقوم بإضافة العديد من RadioButton الى الفورم
فإنها تعتبر مجموعة واحدة ولكي تفهم ماذا يعني ان تكون اداة RadioButton في مجموعة واحدة قم بعمل الآتي :
قم بإضافة اداتين او اكثر من أداة RadioButton للفورم
الان قم بالتنفيذ قم بالضغط على أي واحده من RadioButton سوف يتم التحديد عليها الان اضغط على أداة RadioButton أخرى سوف يتم التحديد على الأداة التي تم الضغط عليها وإخفاء التحديد عن الأداة التي تم الضغط عليها في البداية
تتمتع عناصر التحكم RadioButton و CheckBox بوظيفة مماثلة: فهي توفر خيارات يمكن للمستخدم تحديدها أو مسحها. الفرق هو أنه يمكن تحديد عناصر تحكم CheckBox المتعددة في نفس الوقت ، ولكن أزرار الخيارات تسمح بخيار واحد فقط في المجموعة الواحدة
RichTextBox
عنصر تحكم RichTextBox هو مربع نص متقدم يوفر تحرير النص وميزات التنسيق المتقدمة بما في ذلك تحميل ملفات تنسيق النص المنسق (RTF).
في هذه المقالة ، سأوضح كيفية إنشاء ميزات متنوعة لعنصر تحكم RichTextBox واستخدامه.
إنشاء RichTextBox
يمكننا إنشاء عنصر تحكم RichTextBox باستخدام مصمم النماذج في وقت التصميم أو باستخدام فئة RichTextBox في التعليمات البرمجية في وقت التشغيل.
لإنشاء عنصر تحكم RichTextBox في وقت التصميم ، يمكنك ببساطة سحب وإسقاط عنصر تحكم RichTextBox من Toolbox إلى نموذج في Visual Studio. بمجرد إضافة RichTextBox إلى نموذج ، يمكنك تحريكه وتغيير حجمه باستخدام الماوس وتعيين خصائصه وأحداثه.
إنشاء عنصر تحكم RichTextBox في وقت التشغيل هو مجرد عمل لإنشاء مثيل لفئة RichTextBox ، وتعيين خصائصه وإضافة كائن RichTextBox إلى مجموعة عناصر التحكم في النموذج.
الخطوة الأولى لإنشاء RichTextBox ديناميكي هي إنشاء مثيل لفئة RichTextBox. ينشئ مقتطف التعليمات البرمجية التالي كائن تحكم RichTextBox.
RichTextBox MYRichTextBox = new RichTextBox();
في الخطوة التالية ، يمكنك تعيين خصائص عنصر تحكم RichTextBox. يقوم مقتطف الرمز التالي بتعيين الحجم والموقع ولون الخلفية ولون المقدمة والنص والاسم وخصائص الخط في RichTextBox.
MYRichTextBox.Location = new Point(20, 20);
MYRichTextBox.Width = 300;
MYRichTextBox.Height = 200;
// Set background and foreground
MYRichTextBox.BackColor = Color.White;
MYRichTextBox.ForeColor = Color.Blue;
MYRichTextBox.Text = "I am Dynamic RichTextBox";
MYRichTextBox.Name = "DynamicRichTextBox";
MYRichTextBox.Font = new Font("Georgia", 16);
بمجرد أن يصبح عنصر تحكم RichTextBox جاهزًا بخصائصه ، فإن الخطوة التالية هي إضافة عنصر تحكم RichTextBox إلى النموذج. للقيام بذلك ، نستخدم أسلوب this.Controls.Add. يضيف مقتطف التعليمات البرمجية التالي عنصر تحكم RichTextBox إلى النموذج الحالي.
this.Controls.Add(MYRichTextBox);
يبدو عنصر تحكم RichTextBox مثل الشكل 1.
خصائص RichTextBox
• الخاصية BorderStyle
يمكنك أيضًا تعيين نمط حدود RichTextBox باستخدام الخاصية BorderStyle. يتم تمثيل الخاصية BorderStyle من خلال تعداد BorderStyle الذي يحتوي على ثلاث قيم - FixedSingle و Fixed3D ولا شيء. القيمة الافتراضية لنمط الحدود هي Fixed3D. يعمل مقتطف الشفرة التالي على تعيين نمط حد RichTextBox إلى FixedSingle.
MYRichTextBox.BorderStyle = BorderStyle.FixedSingle;
• الخاصيتين Text و TextLength
تمثل الخاصية Text الخاصة بـ RichTextBox النص الحالي لعنصر تحكم RichTextBox. تعيد خاصية TextLength طول محتويات RichTextBox.
يقوم مقتطف الرمز التالي بتعيين خصائص Text و TextAlign ويحصل على حجم عنصر تحكم RichTextBox.
MYRichTextBox.Text = "I am Dynamic RichTextBox";
int count = MYRichTextBox.TextLength;
إلحاق نص
إحدى الطرق لإلحاق نص إلى RichTextBox هي ببساطة تعيين خاصية Text على النص الحالي بالإضافة إلى نص جديد تريد إلحاق شيء مثل هذا.
MYRichTextBox.Text += " Hello World";
يحتوي RichTextBox أيضًا على دالة ApendText للقيام بنفس الشيء. تلحق دالة AppendText النص في نهاية RichTextBox. يستخدم مقتطف الشفرة التالي أسلوب AppendText لإلحاق نص بمحتويات RichTextBox.
MYRichTextBox.AppendText( " Hello World");
• الخاصية AcceptsTab
إذا تم تعيين عنصر تحكم RichTextBox إلى متعدد الخطوط (multiLine)، يتم استخدام الخاصية AcceptsTab لتعيين عنصر التحكم RichTextBox لقبول المفتاح TAB كنص. إذا لم يتم تعيين هذه الخاصية ، فإن الضغط على مفتاح TAB ينتقل ببساطة إلى عنصر التحكم التالي في النموذج. بشكل افتراضي ، قيمة الخاصية AcceptsTab الافتراضيه لعنصر تحكم RichTextBox False.
• الخاصية WordWrap
إذا كانت قيمة خاصية WordWrap صحيحة (true)، يلتف النص الموجود في عنصر تحكم RichTextBox تلقائيًا إلى السطر التالي إذا لزم الأمر. إذا تم تعيين هذه الخاصية إلى true ، فلن يتم عرض أشرطة التمرير الأفقية بغض النظر عن إعداد خاصية أشرطة التمرير.( ScrollBars)
عنصر تحكم RichTextBox هو مربع نص متقدم يوفر تحرير النص وميزات التنسيق المتقدمة بما في ذلك تحميل ملفات تنسيق النص المنسق (RTF).
في هذه المقالة ، سأوضح كيفية إنشاء ميزات متنوعة لعنصر تحكم RichTextBox واستخدامه.
إنشاء RichTextBox
يمكننا إنشاء عنصر تحكم RichTextBox باستخدام مصمم النماذج في وقت التصميم أو باستخدام فئة RichTextBox في التعليمات البرمجية في وقت التشغيل.
لإنشاء عنصر تحكم RichTextBox في وقت التصميم ، يمكنك ببساطة سحب وإسقاط عنصر تحكم RichTextBox من Toolbox إلى نموذج في Visual Studio. بمجرد إضافة RichTextBox إلى نموذج ، يمكنك تحريكه وتغيير حجمه باستخدام الماوس وتعيين خصائصه وأحداثه.
إنشاء عنصر تحكم RichTextBox في وقت التشغيل هو مجرد عمل لإنشاء مثيل لفئة RichTextBox ، وتعيين خصائصه وإضافة كائن RichTextBox إلى مجموعة عناصر التحكم في النموذج.
الخطوة الأولى لإنشاء RichTextBox ديناميكي هي إنشاء مثيل لفئة RichTextBox. ينشئ مقتطف التعليمات البرمجية التالي كائن تحكم RichTextBox.
RichTextBox MYRichTextBox = new RichTextBox();
في الخطوة التالية ، يمكنك تعيين خصائص عنصر تحكم RichTextBox. يقوم مقتطف الرمز التالي بتعيين الحجم والموقع ولون الخلفية ولون المقدمة والنص والاسم وخصائص الخط في RichTextBox.
MYRichTextBox.Location = new Point(20, 20);
MYRichTextBox.Width = 300;
MYRichTextBox.Height = 200;
// Set background and foreground
MYRichTextBox.BackColor = Color.White;
MYRichTextBox.ForeColor = Color.Blue;
MYRichTextBox.Text = "I am Dynamic RichTextBox";
MYRichTextBox.Name = "DynamicRichTextBox";
MYRichTextBox.Font = new Font("Georgia", 16);
بمجرد أن يصبح عنصر تحكم RichTextBox جاهزًا بخصائصه ، فإن الخطوة التالية هي إضافة عنصر تحكم RichTextBox إلى النموذج. للقيام بذلك ، نستخدم أسلوب this.Controls.Add. يضيف مقتطف التعليمات البرمجية التالي عنصر تحكم RichTextBox إلى النموذج الحالي.
this.Controls.Add(MYRichTextBox);
يبدو عنصر تحكم RichTextBox مثل الشكل 1.
خصائص RichTextBox
• الخاصية BorderStyle
يمكنك أيضًا تعيين نمط حدود RichTextBox باستخدام الخاصية BorderStyle. يتم تمثيل الخاصية BorderStyle من خلال تعداد BorderStyle الذي يحتوي على ثلاث قيم - FixedSingle و Fixed3D ولا شيء. القيمة الافتراضية لنمط الحدود هي Fixed3D. يعمل مقتطف الشفرة التالي على تعيين نمط حد RichTextBox إلى FixedSingle.
MYRichTextBox.BorderStyle = BorderStyle.FixedSingle;
• الخاصيتين Text و TextLength
تمثل الخاصية Text الخاصة بـ RichTextBox النص الحالي لعنصر تحكم RichTextBox. تعيد خاصية TextLength طول محتويات RichTextBox.
يقوم مقتطف الرمز التالي بتعيين خصائص Text و TextAlign ويحصل على حجم عنصر تحكم RichTextBox.
MYRichTextBox.Text = "I am Dynamic RichTextBox";
int count = MYRichTextBox.TextLength;
إلحاق نص
إحدى الطرق لإلحاق نص إلى RichTextBox هي ببساطة تعيين خاصية Text على النص الحالي بالإضافة إلى نص جديد تريد إلحاق شيء مثل هذا.
MYRichTextBox.Text += " Hello World";
يحتوي RichTextBox أيضًا على دالة ApendText للقيام بنفس الشيء. تلحق دالة AppendText النص في نهاية RichTextBox. يستخدم مقتطف الشفرة التالي أسلوب AppendText لإلحاق نص بمحتويات RichTextBox.
MYRichTextBox.AppendText( " Hello World");
• الخاصية AcceptsTab
إذا تم تعيين عنصر تحكم RichTextBox إلى متعدد الخطوط (multiLine)، يتم استخدام الخاصية AcceptsTab لتعيين عنصر التحكم RichTextBox لقبول المفتاح TAB كنص. إذا لم يتم تعيين هذه الخاصية ، فإن الضغط على مفتاح TAB ينتقل ببساطة إلى عنصر التحكم التالي في النموذج. بشكل افتراضي ، قيمة الخاصية AcceptsTab الافتراضيه لعنصر تحكم RichTextBox False.
• الخاصية WordWrap
إذا كانت قيمة خاصية WordWrap صحيحة (true)، يلتف النص الموجود في عنصر تحكم RichTextBox تلقائيًا إلى السطر التالي إذا لزم الأمر. إذا تم تعيين هذه الخاصية إلى true ، فلن يتم عرض أشرطة التمرير الأفقية بغض النظر عن إعداد خاصية أشرطة التمرير.( ScrollBars)
• الخاصية ScrollBars
يمكن أن يحتوي عنصر تحكم Multiline RichTextBox على أشرطة تمرير. يتم استخدام الخاصية ScrollBars لعنصر التحكم RichTextBox لإظهار أشرطة التمرير على عنصر تحكم. يتم تمثيل الخاصية ScrollBars بواسطة تعداد RichTextBoxScrollBars يحتوي على أربع قيم - كلاهما ، عمودي ، أفقي ، ولا شيء.
يجعل مقتطف الرمز التالي كلاً من أشرطة التمرير الرأسية والأفقية نشطة في عنصر تحكم RichTextBox وستكون مرئية عندما يكون التمرير مطلوبًا على عنصر تحكم RichTextBox.
MYRichTextBox.ScrollBars = RichTextBoxScrollBars.Both;
• الخاصية Maximum Length
الحد الأقصى لطول
يمكنك تقييد عدد الأحرف في عنصر تحكم RichTextBox عن طريق تعيين قيمة محددة لخاصية MaxLength. يعمل مقتطف الشفرة التالي على تعيين الحد الأقصى لطول RichTextBox على 50 حرفًا.
MYRichTextBox.MaxLength = 50;
• الخاصية ReadOnly
يقرأ فقط
يمكنك جعل عنصر تحكم RichTextBox للقراءة فقط (غير قابل للتحرير) عن طريق تعيين الخاصية ReadOnly إلى true. يقوم مقتطف التعليمات البرمجية التالي بتعيين الخاصية ReadOnly إلى true.
MYRichTextBox.ReadOnly = true;
• خاصية ShortcutsEnabled
تمكين وتعطيل الاختصارات
تُستخدم خاصية ShortcutsEnabled لـ RichTextBox لتمكين أو تعطيل الاختصارات. بشكل افتراضي ، يتم تمكين الاختصارات. يعمل مقتطف الرمز التالي على تعطيل الاختصارات في RichTextBox.
MYRichTextBox.ShortcutsEnabled = false;
تنطبق خاصية ShortcutsEnabled على مجموعات مفاتيح الاختصارات التالية:
• CTRL+Z
• CTRL+E
• CTRL+C
• CTRL+Y
• CTRL+X
• CTRL+BACKSPACE
• CTRL+V
• CTRL+DELETE
• CTRL+A
• SHIFT+DELETE
• CTRL+L
• SHIFT+INSERT
• CTRL+R
• ¬الخاصية DetectUrls
تعيين قيمة تشير إلى ما إذا كان RichTextBox سيقوم بتنسيق الرابط (URL) تلقائيًا عند كتابته في عنصر التحكم.
قيمتها الافتراضية true أي انهو يقوم بالتنسيق تلقائياً.
لاحظ كيف يتم تنسيق وتمييز الروابط عن النصوص العادية
وعندما يكون الماوس فوق الرابط يتغير شكل مؤشر الماوس الى Hand
يتم التعامل مع النقر على الروابط في حدث LinkClicked وسوف نشرح هذا الحدث عندما نشرح احداث هذه الاداة
• الخاصية AutoWordSelection
تعيين قيمة تشير إلى ما إذا تم تمكين التحديد التلقائي للكلمات.
ملاحظة : إذا تم تعيين هذه الخاصية على true ، فإن تحديد أي جزء من النص في عنصر التحكم يحدد الكلمة بأكملها.
• الخاصية BulletIndent
تعيين المسافة البادئة المستخدمة في عنصر تحكم RichTextBox عند تطبيق نمط التعداد النقطي على النص.
ملاحظة:
لتطبيق نمط التعداد النقطي على فقرة من النص ، قم بتعيين خاصية SelectionBullet إلى true ثم قم بتعيين خاصية BulletIndent إلى عدد وحدات البكسل التي يجب وضع مسافة بادئة لها. سيتم تطبيق نمط الرمز النقطي على الفقرة مع مقدار المسافة البادئة المحددة بعد الرمز النقطي.
خاصية SelectionBullet لاتظهر في قائمة الخصائص يمكنك استخدامها برمجيا كما في الشكل .
MYRichTextBox.SelectionBullet = true;
اما الخاصية BulletIndent فهي موجودة في قائمة الخصائص ويمكنك وضع قيمه للتعيين المسافة او تستخدمها برمجيا كما في الشكل التالي :
MYRichTextBox.BulletIndent = 30;
عند الكتابة سوف يبدو كالشكل التالي
• الخاصية EnableAutoDragDrop
تمكنك هذه الخاصية من سحب الملفات (صور ,txt ,وغيرها من البيانات) و وضعها داخل RichTextBox
هذه الخاصية قيمتها الافتراضية false ان اردت سحب وافلات الملفات داخل RichTextBox قم بتعديل القيمة الى true
• الخاصية ZoomFactor
من خلال هذه الخاصية يمكنك تعيين مستوى التكبير في RichTextBox
يمكن أن يحتوي عنصر تحكم Multiline RichTextBox على أشرطة تمرير. يتم استخدام الخاصية ScrollBars لعنصر التحكم RichTextBox لإظهار أشرطة التمرير على عنصر تحكم. يتم تمثيل الخاصية ScrollBars بواسطة تعداد RichTextBoxScrollBars يحتوي على أربع قيم - كلاهما ، عمودي ، أفقي ، ولا شيء.
يجعل مقتطف الرمز التالي كلاً من أشرطة التمرير الرأسية والأفقية نشطة في عنصر تحكم RichTextBox وستكون مرئية عندما يكون التمرير مطلوبًا على عنصر تحكم RichTextBox.
MYRichTextBox.ScrollBars = RichTextBoxScrollBars.Both;
• الخاصية Maximum Length
الحد الأقصى لطول
يمكنك تقييد عدد الأحرف في عنصر تحكم RichTextBox عن طريق تعيين قيمة محددة لخاصية MaxLength. يعمل مقتطف الشفرة التالي على تعيين الحد الأقصى لطول RichTextBox على 50 حرفًا.
MYRichTextBox.MaxLength = 50;
• الخاصية ReadOnly
يقرأ فقط
يمكنك جعل عنصر تحكم RichTextBox للقراءة فقط (غير قابل للتحرير) عن طريق تعيين الخاصية ReadOnly إلى true. يقوم مقتطف التعليمات البرمجية التالي بتعيين الخاصية ReadOnly إلى true.
MYRichTextBox.ReadOnly = true;
• خاصية ShortcutsEnabled
تمكين وتعطيل الاختصارات
تُستخدم خاصية ShortcutsEnabled لـ RichTextBox لتمكين أو تعطيل الاختصارات. بشكل افتراضي ، يتم تمكين الاختصارات. يعمل مقتطف الرمز التالي على تعطيل الاختصارات في RichTextBox.
MYRichTextBox.ShortcutsEnabled = false;
تنطبق خاصية ShortcutsEnabled على مجموعات مفاتيح الاختصارات التالية:
• CTRL+Z
• CTRL+E
• CTRL+C
• CTRL+Y
• CTRL+X
• CTRL+BACKSPACE
• CTRL+V
• CTRL+DELETE
• CTRL+A
• SHIFT+DELETE
• CTRL+L
• SHIFT+INSERT
• CTRL+R
• ¬الخاصية DetectUrls
تعيين قيمة تشير إلى ما إذا كان RichTextBox سيقوم بتنسيق الرابط (URL) تلقائيًا عند كتابته في عنصر التحكم.
قيمتها الافتراضية true أي انهو يقوم بالتنسيق تلقائياً.
لاحظ كيف يتم تنسيق وتمييز الروابط عن النصوص العادية
وعندما يكون الماوس فوق الرابط يتغير شكل مؤشر الماوس الى Hand
يتم التعامل مع النقر على الروابط في حدث LinkClicked وسوف نشرح هذا الحدث عندما نشرح احداث هذه الاداة
• الخاصية AutoWordSelection
تعيين قيمة تشير إلى ما إذا تم تمكين التحديد التلقائي للكلمات.
ملاحظة : إذا تم تعيين هذه الخاصية على true ، فإن تحديد أي جزء من النص في عنصر التحكم يحدد الكلمة بأكملها.
• الخاصية BulletIndent
تعيين المسافة البادئة المستخدمة في عنصر تحكم RichTextBox عند تطبيق نمط التعداد النقطي على النص.
ملاحظة:
لتطبيق نمط التعداد النقطي على فقرة من النص ، قم بتعيين خاصية SelectionBullet إلى true ثم قم بتعيين خاصية BulletIndent إلى عدد وحدات البكسل التي يجب وضع مسافة بادئة لها. سيتم تطبيق نمط الرمز النقطي على الفقرة مع مقدار المسافة البادئة المحددة بعد الرمز النقطي.
خاصية SelectionBullet لاتظهر في قائمة الخصائص يمكنك استخدامها برمجيا كما في الشكل .
MYRichTextBox.SelectionBullet = true;
اما الخاصية BulletIndent فهي موجودة في قائمة الخصائص ويمكنك وضع قيمه للتعيين المسافة او تستخدمها برمجيا كما في الشكل التالي :
MYRichTextBox.BulletIndent = 30;
عند الكتابة سوف يبدو كالشكل التالي
• الخاصية EnableAutoDragDrop
تمكنك هذه الخاصية من سحب الملفات (صور ,txt ,وغيرها من البيانات) و وضعها داخل RichTextBox
هذه الخاصية قيمتها الافتراضية false ان اردت سحب وافلات الملفات داخل RichTextBox قم بتعديل القيمة الى true
• الخاصية ZoomFactor
من خلال هذه الخاصية يمكنك تعيين مستوى التكبير في RichTextBox
السلام عليكم
بعد انا شرحنا أداة التحكم RichTextBox فمن خلال هذه الأداة يمكننا أداء جميع وظائف معالجة النصوص – من تنسيق النص و إجراء عمليات البحث – بسهوله وبدون جهد كبير
و سنشرح اليوم كيفيه إنشاء محرر نصوص يقوم بوظائف معينه
امثله على برامج محررات النصوص (note pad , المفكرة,word )
في البداية ستحتاج الى إضافة القوائم ( MenuStrip ) للسماح للمستخدم بفتح الملفات وحفظها ، وتنسيق النص ، واختيار الألوان ، وما إلى ذلك.
ملاحظة :
الأدوات التي سوف نحتاجها سوف نضيفها برمجياً (أي نقوم بإنشاء object من كلاسات أدوات التحكم) كذالك خصائص هذه الأدوات يتم التعديل عليها برمجياً
ملاحظة :
الشرح هذا لفهم بعض العمليات على RichTextBox لذالك سوف نهتم على البرمجة وليس التصميم و كل مبرمج وله طريقته الخاصة في تصميم شكل البرنامج الخاص به
لنبدأ :
public partial class Form1 : Form
{
RichTextBox rch = new RichTextBox();
MainMenu mnuMain = new MainMenu();
//
MenuItem mnFile = new MenuItem("File");
MenuItem mnSave = new MenuItem("Save");
MenuItem mnOpen = new MenuItem("Open");
MenuItem mnNew = new MenuItem("New");
//
MenuItem mnEdit = new MenuItem("Edit");
MenuItem mnCopy = new MenuItem("Copy");
MenuItem mnCut = new MenuItem("Cut");
MenuItem mnPaste = new MenuItem("Paste");
MenuItem mnUndo = new MenuItem("Undo");
MenuItem mnRedo = new MenuItem("Redo");
//
//
MenuItem mnFormat = new MenuItem("Format");
MenuItem mnFont = new MenuItem("Font");
//
OpenFileDialog ofd = new OpenFileDialog();
SaveFileDialog sfd = new SaveFileDialog();
FontDialog fd = new FontDialog();
في البداية انشئنا اوبجكت من نوع, RichTextBox وهو الاوبجكت الذي سوف نستخدمه في اغلب عمليات محرر النصوص هذا,
اما الاوبجكت الذي تم إنشائه في السطر الثاني فهو من نوع ) MainMenu ) أي قائمة رئيسية .
القائمة الرئيسية تظهر في اعلى الفورم تحت شريط التحكم
اما الكائنات التي من نوع MenuItem فهي تعتبر عناصر القائمة أي الخيارات التي سوف تظهر في القائمة
سوف نأخذ سطر برمجي نشرحه وبقي الاسطر التي من نفس الاوبجكت ينطبق عليها الشرح التالي :
MenuItem mnFile = new MenuItem("File");
في السطر السابق تم انشاء اوبجكت عنصر قائمة, من خلال دالة البناء التي تحتوي على وسيط من نوع string قمنا بإرسال اسم عنصر القائمة الذي سوف يظهر في اعلى الفورم .
طريقة أخرى تكافئ السطر البرمجي السابق :
MenuItem mnFile = new MenuItem();
public Form1()
{
InitializeComponent();
mnFile.Text = "File";
}
هل عرفت ما يعني الكود البرمجي الأول .
يعني عند انشاء كائن من خلال دالة البناء التي تحتوي على وسيط string لا يلزم اسناد قيمه للخاصية text كما في الكود الثاني فقط قم بإرسال قيمه من نوع string الى دالة البناء وهي سوف تقوم بمهمه إسناد القيمة للخاصية text .
يمكنك ايضاً كتابة اسم عنصر القائمة باللغة العربية .
OpenFileDialog ofd = new OpenFileDialog();
SaveFileDialog sfd = new SaveFileDialog();
FontDialog fd = new FontDialog();
الثلاثة الاسطر السابقة هي كائنات سوف نحتاجة عندما يضغط المستخدم على احد عناصر القائمة
File > Open
File > Save
Format > Font
public Form2()
{
InitializeComponent();
/////
rch.Dock = DockStyle.Fill;
Controls.Add(rch);
////
mnFile.MenuItems.Add(mnSave);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnOpen);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnNew);
//
mnEdit.MenuItems.Add(mnUndo);
mnEdit.MenuItems.Add(mnRedo);
mnEdit.MenuItems.Add(mnCopy);
mnEdit.MenuItems.Add(mnCut);
mnEdit.MenuItems.Add(mnPaste);
//
mnFormat.MenuItems.Add(mnFont);
//
mnuMain.MenuItems.Add(mnFile);
mnuMain.MenuItems.Add(mnEdit);
mnuMain.MenuItems.Add(mnFormat);
this.Menu = mnuMain;
//
mnSave.Click += new EventHandler(this.FileClicked);
mnOpen.Click += new EventHandler(this.FileClicked);
//
بعد انا شرحنا أداة التحكم RichTextBox فمن خلال هذه الأداة يمكننا أداء جميع وظائف معالجة النصوص – من تنسيق النص و إجراء عمليات البحث – بسهوله وبدون جهد كبير
و سنشرح اليوم كيفيه إنشاء محرر نصوص يقوم بوظائف معينه
امثله على برامج محررات النصوص (note pad , المفكرة,word )
في البداية ستحتاج الى إضافة القوائم ( MenuStrip ) للسماح للمستخدم بفتح الملفات وحفظها ، وتنسيق النص ، واختيار الألوان ، وما إلى ذلك.
ملاحظة :
الأدوات التي سوف نحتاجها سوف نضيفها برمجياً (أي نقوم بإنشاء object من كلاسات أدوات التحكم) كذالك خصائص هذه الأدوات يتم التعديل عليها برمجياً
ملاحظة :
الشرح هذا لفهم بعض العمليات على RichTextBox لذالك سوف نهتم على البرمجة وليس التصميم و كل مبرمج وله طريقته الخاصة في تصميم شكل البرنامج الخاص به
لنبدأ :
public partial class Form1 : Form
{
RichTextBox rch = new RichTextBox();
MainMenu mnuMain = new MainMenu();
//
MenuItem mnFile = new MenuItem("File");
MenuItem mnSave = new MenuItem("Save");
MenuItem mnOpen = new MenuItem("Open");
MenuItem mnNew = new MenuItem("New");
//
MenuItem mnEdit = new MenuItem("Edit");
MenuItem mnCopy = new MenuItem("Copy");
MenuItem mnCut = new MenuItem("Cut");
MenuItem mnPaste = new MenuItem("Paste");
MenuItem mnUndo = new MenuItem("Undo");
MenuItem mnRedo = new MenuItem("Redo");
//
//
MenuItem mnFormat = new MenuItem("Format");
MenuItem mnFont = new MenuItem("Font");
//
OpenFileDialog ofd = new OpenFileDialog();
SaveFileDialog sfd = new SaveFileDialog();
FontDialog fd = new FontDialog();
في البداية انشئنا اوبجكت من نوع, RichTextBox وهو الاوبجكت الذي سوف نستخدمه في اغلب عمليات محرر النصوص هذا,
اما الاوبجكت الذي تم إنشائه في السطر الثاني فهو من نوع ) MainMenu ) أي قائمة رئيسية .
القائمة الرئيسية تظهر في اعلى الفورم تحت شريط التحكم
اما الكائنات التي من نوع MenuItem فهي تعتبر عناصر القائمة أي الخيارات التي سوف تظهر في القائمة
سوف نأخذ سطر برمجي نشرحه وبقي الاسطر التي من نفس الاوبجكت ينطبق عليها الشرح التالي :
MenuItem mnFile = new MenuItem("File");
في السطر السابق تم انشاء اوبجكت عنصر قائمة, من خلال دالة البناء التي تحتوي على وسيط من نوع string قمنا بإرسال اسم عنصر القائمة الذي سوف يظهر في اعلى الفورم .
طريقة أخرى تكافئ السطر البرمجي السابق :
MenuItem mnFile = new MenuItem();
public Form1()
{
InitializeComponent();
mnFile.Text = "File";
}
هل عرفت ما يعني الكود البرمجي الأول .
يعني عند انشاء كائن من خلال دالة البناء التي تحتوي على وسيط string لا يلزم اسناد قيمه للخاصية text كما في الكود الثاني فقط قم بإرسال قيمه من نوع string الى دالة البناء وهي سوف تقوم بمهمه إسناد القيمة للخاصية text .
يمكنك ايضاً كتابة اسم عنصر القائمة باللغة العربية .
OpenFileDialog ofd = new OpenFileDialog();
SaveFileDialog sfd = new SaveFileDialog();
FontDialog fd = new FontDialog();
الثلاثة الاسطر السابقة هي كائنات سوف نحتاجة عندما يضغط المستخدم على احد عناصر القائمة
File > Open
File > Save
Format > Font
public Form2()
{
InitializeComponent();
/////
rch.Dock = DockStyle.Fill;
Controls.Add(rch);
////
mnFile.MenuItems.Add(mnSave);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnOpen);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnNew);
//
mnEdit.MenuItems.Add(mnUndo);
mnEdit.MenuItems.Add(mnRedo);
mnEdit.MenuItems.Add(mnCopy);
mnEdit.MenuItems.Add(mnCut);
mnEdit.MenuItems.Add(mnPaste);
//
mnFormat.MenuItems.Add(mnFont);
//
mnuMain.MenuItems.Add(mnFile);
mnuMain.MenuItems.Add(mnEdit);
mnuMain.MenuItems.Add(mnFormat);
this.Menu = mnuMain;
//
mnSave.Click += new EventHandler(this.FileClicked);
mnOpen.Click += new EventHandler(this.FileClicked);
//
mnUndo.Click += new EventHandler(this.EditClicked);
mnCut.Click += new EventHandler(this.EditClicked);
mnCopy.Click += new EventHandler(this.EditClicked);
mnPaste.Click += new EventHandler(this.EditClicked);
mnRedo.Click += new EventHandler(this.EditClicked);
//
mnFont.Click += new EventHandler(this.FormatClicked);
}
شرح الاكواد التي بداخل دالة البناء :
في بداية اسطر التي بداخل دالة البناء قمنا بضبط خاصية Dock للاوبجكت rch
بعد ذلك قمنا بإضافته للفورم .
mnFile.MenuItems.Add(mnSave);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnOpen);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnNew);
//
mnEdit.MenuItems.Add(mnUndo);
mnEdit.MenuItems.Add(mnRedo);
mnEdit.MenuItems.Add(mnCopy);
mnEdit.MenuItems.Add(mnCut);
mnEdit.MenuItems.Add(mnPaste);
//
mnFormat.MenuItems.Add(mnFont);
اما الاسطر السابقة فقمنا بإضافة العناصر التي ستكون فرعية الى قاوائم رئيسية
فمثلاّ القائمة File ستكون قائمة رئيسية كذالك Edit و Format والسبب اننا اضفناهن كقوائم رئيسية سنريك الاكواد بعد ان انتهي من هذه الفقرة.
القائمة File تحتزي على (Save,New,Open )
القائمة Edit تحتوي على (Cupy,Cut,… )
وهكذا
اما بالنسبة للكود
mnFile.MenuItems.Add("-");
فهو يقوم بوضع فاصل بين العناصر
mnuMain.MenuItems.Add(mnFile);
mnuMain.MenuItems.Add(mnEdit);
mnuMain.MenuItems.Add(mnFormat);
هنا تم إضافة العناصر File و Edit و Format الى القائمة الرئيسية أي التي سوف تظهر في اعلى الفورم
اما الكود التالي فهو يقوم باضافه أداة القائمة الرئيسية بما تحتويه الى الفورم
this.Menu = mnuMain;
بهذه الطريقه يتم إضافة القائمة الى الفورم
لا تحاول تجرب الاسطر التاليه لانها لن تجدي نفعاً
this.components.Add(mnuMain);
اذا استخدمت الكود السابق سوف تحصل على Exception
اما اذا استخدت الكود التالي فلن سوف يظهر خطاء صريح يخبرك به الكمبايلر
this.Controls.Add(mnuMain);
الان نأتي الى اسطر إنشاء الاحداث
mnSave.Click += new EventHandler(this.FileClicked);
mnOpen.Click += new EventHandler(this.FileClicked);
//
mnUndo.Click += new EventHandler(this.EditClicked);
mnCut.Click += new EventHandler(this.EditClicked);
mnCopy.Click += new EventHandler(this.EditClicked);
mnPaste.Click += new EventHandler(this.EditClicked);
mnRedo.Click += new EventHandler(this.EditClicked);
//
mnFont.Click += new EventHandler(this.FormatClicked);
قد تستغرب اننا نقوم بإنشاء نفس دالة حدث لاكثر من عنصر وذلك لكي نختصر كتابة الاكواد وليس من الضروري ان نقوم بعمل داله حدث لكل عنصر او لكل أداة من أدوات التحكم
الطريقة هذه لكتابة احداث أدوات كثيرة في دالة واحدة حتماً ستعجبك .
الان سوف اشرح كيف نختصر انشاء دوال للاحداث في دالة واحدة
نبدا بالدالة EditClicked
private void EditClicked(Object Sender, EventArgs e)
{
MenuItem mniTemp = (MenuItem)Sender;
switch (mniTemp.Text)
{
case "Undo":
rch.Undo();
break;
case "Cut":
if (rch.SelectedRtf != "")
{
rch.Cut();
}
break;
case "Copy":
if (rch.SelectedRtf != "")
{
rch.Copy();
}
break;
case "Paste":
rch.Paste();
break;
case "Redo":
rch.Redo();
break;
}
}
ركز على السطر التالي """"""
MenuItem mniTemp = (MenuItem)Sender;
هذا السطر هو الذي يسمح بإن تقوم بعمل احداث أدوات متعددة من نفس النوع بداخل دالة واحدة
وذلك من خلال الشرط الذي في جملة الاختيار switch
واي أداة لها نص (text) مشابهه لأي حاله case من حالات switch يتم تنفيذها
mnCut.Click += new EventHandler(this.EditClicked);
mnCopy.Click += new EventHandler(this.EditClicked);
mnPaste.Click += new EventHandler(this.EditClicked);
mnRedo.Click += new EventHandler(this.EditClicked);
//
mnFont.Click += new EventHandler(this.FormatClicked);
}
شرح الاكواد التي بداخل دالة البناء :
في بداية اسطر التي بداخل دالة البناء قمنا بضبط خاصية Dock للاوبجكت rch
بعد ذلك قمنا بإضافته للفورم .
mnFile.MenuItems.Add(mnSave);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnOpen);
mnFile.MenuItems.Add("-");
mnFile.MenuItems.Add(mnNew);
//
mnEdit.MenuItems.Add(mnUndo);
mnEdit.MenuItems.Add(mnRedo);
mnEdit.MenuItems.Add(mnCopy);
mnEdit.MenuItems.Add(mnCut);
mnEdit.MenuItems.Add(mnPaste);
//
mnFormat.MenuItems.Add(mnFont);
اما الاسطر السابقة فقمنا بإضافة العناصر التي ستكون فرعية الى قاوائم رئيسية
فمثلاّ القائمة File ستكون قائمة رئيسية كذالك Edit و Format والسبب اننا اضفناهن كقوائم رئيسية سنريك الاكواد بعد ان انتهي من هذه الفقرة.
القائمة File تحتزي على (Save,New,Open )
القائمة Edit تحتوي على (Cupy,Cut,… )
وهكذا
اما بالنسبة للكود
mnFile.MenuItems.Add("-");
فهو يقوم بوضع فاصل بين العناصر
mnuMain.MenuItems.Add(mnFile);
mnuMain.MenuItems.Add(mnEdit);
mnuMain.MenuItems.Add(mnFormat);
هنا تم إضافة العناصر File و Edit و Format الى القائمة الرئيسية أي التي سوف تظهر في اعلى الفورم
اما الكود التالي فهو يقوم باضافه أداة القائمة الرئيسية بما تحتويه الى الفورم
this.Menu = mnuMain;
بهذه الطريقه يتم إضافة القائمة الى الفورم
لا تحاول تجرب الاسطر التاليه لانها لن تجدي نفعاً
this.components.Add(mnuMain);
اذا استخدمت الكود السابق سوف تحصل على Exception
اما اذا استخدت الكود التالي فلن سوف يظهر خطاء صريح يخبرك به الكمبايلر
this.Controls.Add(mnuMain);
الان نأتي الى اسطر إنشاء الاحداث
mnSave.Click += new EventHandler(this.FileClicked);
mnOpen.Click += new EventHandler(this.FileClicked);
//
mnUndo.Click += new EventHandler(this.EditClicked);
mnCut.Click += new EventHandler(this.EditClicked);
mnCopy.Click += new EventHandler(this.EditClicked);
mnPaste.Click += new EventHandler(this.EditClicked);
mnRedo.Click += new EventHandler(this.EditClicked);
//
mnFont.Click += new EventHandler(this.FormatClicked);
قد تستغرب اننا نقوم بإنشاء نفس دالة حدث لاكثر من عنصر وذلك لكي نختصر كتابة الاكواد وليس من الضروري ان نقوم بعمل داله حدث لكل عنصر او لكل أداة من أدوات التحكم
الطريقة هذه لكتابة احداث أدوات كثيرة في دالة واحدة حتماً ستعجبك .
الان سوف اشرح كيف نختصر انشاء دوال للاحداث في دالة واحدة
نبدا بالدالة EditClicked
private void EditClicked(Object Sender, EventArgs e)
{
MenuItem mniTemp = (MenuItem)Sender;
switch (mniTemp.Text)
{
case "Undo":
rch.Undo();
break;
case "Cut":
if (rch.SelectedRtf != "")
{
rch.Cut();
}
break;
case "Copy":
if (rch.SelectedRtf != "")
{
rch.Copy();
}
break;
case "Paste":
rch.Paste();
break;
case "Redo":
rch.Redo();
break;
}
}
ركز على السطر التالي """"""
MenuItem mniTemp = (MenuItem)Sender;
هذا السطر هو الذي يسمح بإن تقوم بعمل احداث أدوات متعددة من نفس النوع بداخل دالة واحدة
وذلك من خلال الشرط الذي في جملة الاختيار switch
واي أداة لها نص (text) مشابهه لأي حاله case من حالات switch يتم تنفيذها
فمثلاً عندما تكلمنا عن الطريقة التي اختصرنا بها دوال الاحداث الخاصة بكل أداة وقمنا بعملهن جميعاً في دالة واحدة وقمنا بعمل شرط في switch لكي يتم المقارنة من خلال خاصية text لاداة التحكم ارجع الى السطر الذي به
"""" وإقراء الاسطر التي بعده
لنكمل شرحنا
قد يحتوي برنامجك على ازرار او أي أداة تحكم لايوجد بها نص وقد تكون صممت برنامجك بيحث تحتوي الاداوت على ايقونات وما الى ذلك وتريد ان تختصر كتابة دوال الاحداث مثل الطريقة التي شرحناها أعلاه
أولا قم بإضافة ثلاثة ازرار الى الفورم button1,button2,button3
قم بتحديد نص فريد للخاصية AccessibleName لكل الازرار
الان اكتب الاكواد التالية :
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(this.ButtonClicked);
button2.Click += new EventHandler(this.ButtonClicked);
button3.Click += new EventHandler(this.ButtonClicked);
}
private void ButtonClicked(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.AccessibleName)
{
case"b1":
MessageBox.Show("I'm Button 1");
break;
case "b2":
MessageBox.Show("I'm Button 2");
break;
case "b3":
MessageBox.Show("I'm Button 3");
break;
default:
break;
}
}
نتوقف الى هنا سنكمل باقي العمليات لمحرر النصوص في وقت لاحق إن شاء الله....
"""" وإقراء الاسطر التي بعده
لنكمل شرحنا
قد يحتوي برنامجك على ازرار او أي أداة تحكم لايوجد بها نص وقد تكون صممت برنامجك بيحث تحتوي الاداوت على ايقونات وما الى ذلك وتريد ان تختصر كتابة دوال الاحداث مثل الطريقة التي شرحناها أعلاه
أولا قم بإضافة ثلاثة ازرار الى الفورم button1,button2,button3
قم بتحديد نص فريد للخاصية AccessibleName لكل الازرار
الان اكتب الاكواد التالية :
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(this.ButtonClicked);
button2.Click += new EventHandler(this.ButtonClicked);
button3.Click += new EventHandler(this.ButtonClicked);
}
private void ButtonClicked(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.AccessibleName)
{
case"b1":
MessageBox.Show("I'm Button 1");
break;
case "b2":
MessageBox.Show("I'm Button 2");
break;
case "b3":
MessageBox.Show("I'm Button 3");
break;
default:
break;
}
}
نتوقف الى هنا سنكمل باقي العمليات لمحرر النصوص في وقت لاحق إن شاء الله....
قد يقول البعض ان هذه الطريقة لاتنفع الا للادوات التي تحوي على قيم في خاصية text يعني يوجد لديهن نص كلامك صحيح ولاكن يوجد طريقة أخرى سوف نشرحها في نهاية الموضوع وهي عنطريق استخدام الخاصية AccessibleName
دالة الحدث FileClicked
DialogResult result;
private void FileClicked(object sender,EventArgs e)
{
MenuItem menu = (MenuItem)sender;
switch (menu.Text)
{
case "Save":
sfd.DefaultExt = "*.txt";
sfd.Filter = "text file (*.txt)|*.txt";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
sfd.FileName.Length > 0)
{
rch.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText);
}
break;
case "Open":
if (rch.Modified)
result = MessageBox.Show("Do you want to continue without saving the current file?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{
return;
}
else
{
ofd.DefaultExt = "text file |*.txt|Rich Text Files|*.rtf";
ofd.ShowDialog();
if (ofd.FileName == "")
{
return;
}
string strExt;
strExt = System.IO.Path.GetExtension(ofd.FileName);
strExt = strExt.ToUpper();
if (strExt == ".RTF")
{
rch.LoadFile(ofd.FileName, RichTextBoxStreamType.RichText);
}
else
{
System.IO.StreamReader txtReader;
txtReader = new System.IO.StreamReader(ofd.FileName);
rch.Text = txtReader.ReadToEnd();
txtReader.Close();
txtReader = null;
}
}
break;
default:
break;
}
}
شرح لبعض الخصائص الجديدة التابعة لاداة RichTextBox
الخاصية Modified
تشير إلى أن عنصر تحكم RichTextBox هل قد تم تعديله من قبل المستخدم منذ إنشاء عنصر التحكم أو تم تعيين محتوياته آخر مرة.
الدالة الأخيرة FormatClicked الخاصة بتنسيق النص
private void FormatClicked(Object Sender, EventArgs e)
{
MenuItem mniTemp = (MenuItem)Sender;
switch (mniTemp.Text)
{
case "Font":
fd.ShowColor = true;
fd.Font = this.Font;
if (fd.ShowDialog() == DialogResult.OK)
{
rch.Font = fd.Font;
rch.ForeColor = fd.Color;
this.ForeColor = fd.Color;
}
break;
}
}
ملاحظة:
عند تحميل ملف باستخدام الدالة LoadFile ، تستبدل محتويات الملف الجاري تحميله محتويات اداة التحكم RichTextBox بالكامل. سيؤدي ذلك إلى تغيير قيم خصائص النص و Rtf.
الان نشرح استخدام خاصية AccessibleName
الترجمة الحرفية لهذه الخاصية تعني اسم الوصول
هذه الخاصية تمتلكها جميع أدوات التحكم التي تظهر في الفورم
وظيفتها تشبه الى حد ما الخاصية text ولاكن الاختلاف الوحيد هو ان خاصية اسم الوصول لاتظهر على الأداة وتستخدم كمعرف للوصول الى الأداة
دالة الحدث FileClicked
DialogResult result;
private void FileClicked(object sender,EventArgs e)
{
MenuItem menu = (MenuItem)sender;
switch (menu.Text)
{
case "Save":
sfd.DefaultExt = "*.txt";
sfd.Filter = "text file (*.txt)|*.txt";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
sfd.FileName.Length > 0)
{
rch.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText);
}
break;
case "Open":
if (rch.Modified)
result = MessageBox.Show("Do you want to continue without saving the current file?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{
return;
}
else
{
ofd.DefaultExt = "text file |*.txt|Rich Text Files|*.rtf";
ofd.ShowDialog();
if (ofd.FileName == "")
{
return;
}
string strExt;
strExt = System.IO.Path.GetExtension(ofd.FileName);
strExt = strExt.ToUpper();
if (strExt == ".RTF")
{
rch.LoadFile(ofd.FileName, RichTextBoxStreamType.RichText);
}
else
{
System.IO.StreamReader txtReader;
txtReader = new System.IO.StreamReader(ofd.FileName);
rch.Text = txtReader.ReadToEnd();
txtReader.Close();
txtReader = null;
}
}
break;
default:
break;
}
}
شرح لبعض الخصائص الجديدة التابعة لاداة RichTextBox
الخاصية Modified
تشير إلى أن عنصر تحكم RichTextBox هل قد تم تعديله من قبل المستخدم منذ إنشاء عنصر التحكم أو تم تعيين محتوياته آخر مرة.
الدالة الأخيرة FormatClicked الخاصة بتنسيق النص
private void FormatClicked(Object Sender, EventArgs e)
{
MenuItem mniTemp = (MenuItem)Sender;
switch (mniTemp.Text)
{
case "Font":
fd.ShowColor = true;
fd.Font = this.Font;
if (fd.ShowDialog() == DialogResult.OK)
{
rch.Font = fd.Font;
rch.ForeColor = fd.Color;
this.ForeColor = fd.Color;
}
break;
}
}
ملاحظة:
عند تحميل ملف باستخدام الدالة LoadFile ، تستبدل محتويات الملف الجاري تحميله محتويات اداة التحكم RichTextBox بالكامل. سيؤدي ذلك إلى تغيير قيم خصائص النص و Rtf.
الان نشرح استخدام خاصية AccessibleName
الترجمة الحرفية لهذه الخاصية تعني اسم الوصول
هذه الخاصية تمتلكها جميع أدوات التحكم التي تظهر في الفورم
وظيفتها تشبه الى حد ما الخاصية text ولاكن الاختلاف الوحيد هو ان خاصية اسم الوصول لاتظهر على الأداة وتستخدم كمعرف للوصول الى الأداة
شرح استخدام خاصية AccessibleName
الترجمة الحرفية لهذه الخاصية تعني اسم الوصول
هذه الخاصية تمتلكها جميع أدوات التحكم التي تظهر في الفورم
وظيفتها تشبه الى حد ما الخاصية text ولاكن الاختلاف الوحيد هو ان خاصية اسم الوصول لاتظهر على الأداة وتستخدم كمعرف للوصول الى الأداة
فمثلاً عندما تكلمنا عن الطريقة التي اختصرنا بها دوال الاحداث الخاصة بكل أداة وقمنا بعملهن جميعاً في دالة واحدة وقمنا بعمل شرط في switch لكي يتم المقارنة من خلال خاصية text لاداة التحكم ارجع الى السطر الذي به
"""" وإقراء الاسطر التي بعده
لنكمل شرحنا
قد يحتوي برنامجك على ازرار او أي أداة تحكم لايوجد بها نص وقد تكون صممت برنامجك بيحث تحتوي الاداوت على ايقونات وما الى ذلك وتريد ان تختصر كتابة دوال الاحداث مثل الطريقة التي شرحناها أعلاه
أولا قم بإضافة ثلاثة ازرار الى الفورم button1,button2,button3
قم بتحديد نص فريد للخاصية AccessibleName لكل الازرار
الان اكتب الاكواد التالية :
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(this.ButtonClicked);
button2.Click += new EventHandler(this.ButtonClicked);
button3.Click += new EventHandler(this.ButtonClicked);
}
private void ButtonClicked(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.AccessibleName)
{
case"b1":
MessageBox.Show("I'm Button 1");
break;
case "b2":
MessageBox.Show("I'm Button 2");
break;
case "b3":
MessageBox.Show("I'm Button 3");
break;
default:
break;
}
}
سنكمل باقي العمليات لمحرر النصوص في وقت لاحق إن شاء الله....
الترجمة الحرفية لهذه الخاصية تعني اسم الوصول
هذه الخاصية تمتلكها جميع أدوات التحكم التي تظهر في الفورم
وظيفتها تشبه الى حد ما الخاصية text ولاكن الاختلاف الوحيد هو ان خاصية اسم الوصول لاتظهر على الأداة وتستخدم كمعرف للوصول الى الأداة
فمثلاً عندما تكلمنا عن الطريقة التي اختصرنا بها دوال الاحداث الخاصة بكل أداة وقمنا بعملهن جميعاً في دالة واحدة وقمنا بعمل شرط في switch لكي يتم المقارنة من خلال خاصية text لاداة التحكم ارجع الى السطر الذي به
"""" وإقراء الاسطر التي بعده
لنكمل شرحنا
قد يحتوي برنامجك على ازرار او أي أداة تحكم لايوجد بها نص وقد تكون صممت برنامجك بيحث تحتوي الاداوت على ايقونات وما الى ذلك وتريد ان تختصر كتابة دوال الاحداث مثل الطريقة التي شرحناها أعلاه
أولا قم بإضافة ثلاثة ازرار الى الفورم button1,button2,button3
قم بتحديد نص فريد للخاصية AccessibleName لكل الازرار
الان اكتب الاكواد التالية :
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(this.ButtonClicked);
button2.Click += new EventHandler(this.ButtonClicked);
button3.Click += new EventHandler(this.ButtonClicked);
}
private void ButtonClicked(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.AccessibleName)
{
case"b1":
MessageBox.Show("I'm Button 1");
break;
case "b2":
MessageBox.Show("I'm Button 2");
break;
case "b3":
MessageBox.Show("I'm Button 3");
break;
default:
break;
}
}
سنكمل باقي العمليات لمحرر النصوص في وقت لاحق إن شاء الله....
السلام عليكم ورحمه الله
اليوم ان شاء سوف نكمل باقي بعض عمليات على مشروع محرر النصوص .
ما سوف نشرحه الان هو تكمله للعمليات الأساسية لمحرر النصوص
مثل اكواد FontStyle (غامق,مائل,مسطر,خط في المنتصف)
و اكواد محاذاة النص
سنحاول اليوم قدر المستطاع اختصار الموضوع هذا لكي (نقوم بشرح موضوع جديد اليوم إن شاء الله)
لنفرض ان لديك ازرار في الفورم تقوم بتغيير نمط النص
لكي تقوم بجعل النص الى غامق (Bold) عند النقر عليه
لنفرض انك قمت بعمل الكود التالي ماذا سيحدث؟
private void btnBold_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Bold);}
الكود السابق صحيح ولن تواجهك أي مشكلة او ظهور Error اثناء كتابتك الاكواد
ولاكن سوف تحدث مشكلة وهي انهو عندما تقوم بالكتابة في richtextBox ومن ثم تريد تغيير نمط النص ثم تقوم بالنقر على الزر سوف يتم تنفيذ العمليه بنجاح ويتغير نمط النص من normal الى Bold
لاحظ اين سوف تظهر المشكلة
الان انت تريد ان تجعل نمط نص الى normal وتنقر على الزر مرة أخرى لكي يتم تغييره لن يتم تغيير النص عندما تقوم بالضغط على زر Bold وذلك لان صيغه كتابة الكود السابق غير صحيحه للعمليه التي في برنامج الورد
مثلاً عند الضغط على الزر B في برنامج Word يتحول نمط النص الى غامق وعند الضغط عليه مرة أخرى يعود الى حالته الطبيعية normal
الكود التالي يقوم بالعملية بشكل صحيح
ملاحظة : في البرمجة يوجد اكثر من طريقة لحل مشكلة معينه ولا يجب عليك ان تقيد نفسك بكود وكانهوا قانون رياضي لا يصح حل المعادلة (العملية) الا به .
لاحظ كيف سوف نتطرق الى مثالين وكلاهما يقوما بنفس العملية
الكود الأول :
private void btnBold_Click(object sender, EventArgs e)
{
if (!(richTextBox1.SelectionFont == null))
{
Font currentFont = richTextBox1.SelectionFont;
FontStyle newFontStyle;
if (richTextBox1.SelectionFont.Bold == true)
{
newFontStyle = FontStyle.Regular;
}
else
{
newFontStyle = FontStyle.Bold;
}
richTextBox1.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
}
} }
لاحظ الكود الأول في كم اسطر برمجية قام بحل المشكلة
الكود الثاني :
private void btnBold_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Bold);}
كلا الكودين السابقين يقوما بتغيير نمط النص الى Bold عند النقر عليه وعند النقر مرة أخرى يعود الى normal
كود عمل النص مائل italic
نفس الكود السابق فقط قم بتغيير Bold الى Italic
private void btnItalic_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Italic);}
كود نص مسطر
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Underline);
كود خط على منتصف النص
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Strikeout);
محاذاة النص لليسار
private void btnAlignLeft_Click(object sender, EventArgs e)
{
richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
}
كود محاذاة الى الوسط
private void btnAlignCenter_Click(object sender, EventArgs e)
{
richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
}
كود محاذاة الى اليمين
private void btnAlignRight_Click(object sender, EventArgs e)
{
richTextBox1.SelectionAlignment = HorizontalAlignment.Right;
}
.........................................................
انتهينا من عمليات محرر نصوص الأساسية والبسيطة
يوجد عمليات أخرى إحترافية لمحرر النصوص مثل
البحث عن كلمة في المستند مع إمكانية تغيير الكلمة في المستند كامل Replace
إمكانية اخذ لقطة للشاشة واضافتها للمستند
معرفه عدد الكلمات في المستند
طباعة المستند
إضافة جدول للمستند
يحتوي المحرر على صفحات عند كتابة مستند اي عندما توصل الى نهاية الصفحة يضيف صفحه جديده تلقائيا وتبدا تكتب فيها (مثل برنامج الورد)
اليوم ان شاء سوف نكمل باقي بعض عمليات على مشروع محرر النصوص .
ما سوف نشرحه الان هو تكمله للعمليات الأساسية لمحرر النصوص
مثل اكواد FontStyle (غامق,مائل,مسطر,خط في المنتصف)
و اكواد محاذاة النص
سنحاول اليوم قدر المستطاع اختصار الموضوع هذا لكي (نقوم بشرح موضوع جديد اليوم إن شاء الله)
لنفرض ان لديك ازرار في الفورم تقوم بتغيير نمط النص
لكي تقوم بجعل النص الى غامق (Bold) عند النقر عليه
لنفرض انك قمت بعمل الكود التالي ماذا سيحدث؟
private void btnBold_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Bold);}
الكود السابق صحيح ولن تواجهك أي مشكلة او ظهور Error اثناء كتابتك الاكواد
ولاكن سوف تحدث مشكلة وهي انهو عندما تقوم بالكتابة في richtextBox ومن ثم تريد تغيير نمط النص ثم تقوم بالنقر على الزر سوف يتم تنفيذ العمليه بنجاح ويتغير نمط النص من normal الى Bold
لاحظ اين سوف تظهر المشكلة
الان انت تريد ان تجعل نمط نص الى normal وتنقر على الزر مرة أخرى لكي يتم تغييره لن يتم تغيير النص عندما تقوم بالضغط على زر Bold وذلك لان صيغه كتابة الكود السابق غير صحيحه للعمليه التي في برنامج الورد
مثلاً عند الضغط على الزر B في برنامج Word يتحول نمط النص الى غامق وعند الضغط عليه مرة أخرى يعود الى حالته الطبيعية normal
الكود التالي يقوم بالعملية بشكل صحيح
ملاحظة : في البرمجة يوجد اكثر من طريقة لحل مشكلة معينه ولا يجب عليك ان تقيد نفسك بكود وكانهوا قانون رياضي لا يصح حل المعادلة (العملية) الا به .
لاحظ كيف سوف نتطرق الى مثالين وكلاهما يقوما بنفس العملية
الكود الأول :
private void btnBold_Click(object sender, EventArgs e)
{
if (!(richTextBox1.SelectionFont == null))
{
Font currentFont = richTextBox1.SelectionFont;
FontStyle newFontStyle;
if (richTextBox1.SelectionFont.Bold == true)
{
newFontStyle = FontStyle.Regular;
}
else
{
newFontStyle = FontStyle.Bold;
}
richTextBox1.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
}
} }
لاحظ الكود الأول في كم اسطر برمجية قام بحل المشكلة
الكود الثاني :
private void btnBold_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Bold);}
كلا الكودين السابقين يقوما بتغيير نمط النص الى Bold عند النقر عليه وعند النقر مرة أخرى يعود الى normal
كود عمل النص مائل italic
نفس الكود السابق فقط قم بتغيير Bold الى Italic
private void btnItalic_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Italic);}
كود نص مسطر
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Underline);
كود خط على منتصف النص
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, richTextBox1.SelectionFont.Style ^ FontStyle.Strikeout);
محاذاة النص لليسار
private void btnAlignLeft_Click(object sender, EventArgs e)
{
richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
}
كود محاذاة الى الوسط
private void btnAlignCenter_Click(object sender, EventArgs e)
{
richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
}
كود محاذاة الى اليمين
private void btnAlignRight_Click(object sender, EventArgs e)
{
richTextBox1.SelectionAlignment = HorizontalAlignment.Right;
}
.........................................................
انتهينا من عمليات محرر نصوص الأساسية والبسيطة
يوجد عمليات أخرى إحترافية لمحرر النصوص مثل
البحث عن كلمة في المستند مع إمكانية تغيير الكلمة في المستند كامل Replace
إمكانية اخذ لقطة للشاشة واضافتها للمستند
معرفه عدد الكلمات في المستند
طباعة المستند
إضافة جدول للمستند
يحتوي المحرر على صفحات عند كتابة مستند اي عندما توصل الى نهاية الصفحة يضيف صفحه جديده تلقائيا وتبدا تكتب فيها (مثل برنامج الورد)
إضافة اشكال الى المستند
مثال على مايكروسوفت ورد (اذهب الى قائمة إدراج واضغط على اشكال)سوف تشاهد الاشكال
والكثييير من العمليات الاحترافية الموجودة في مايكروسوفت Word
تستطيع انت ان تقوم بعملها و برمجتها في مشروعك
لايمكننا ان نشرحهن جميعاً في القناة نظراً لكثره الاكود
لذالك سوف نقوم بإرسالهن في ملف مشروع تفتحه في الفيجوال استوديو
مثال على مايكروسوفت ورد (اذهب الى قائمة إدراج واضغط على اشكال)سوف تشاهد الاشكال
والكثييير من العمليات الاحترافية الموجودة في مايكروسوفت Word
تستطيع انت ان تقوم بعملها و برمجتها في مشروعك
لايمكننا ان نشرحهن جميعاً في القناة نظراً لكثره الاكود
لذالك سوف نقوم بإرسالهن في ملف مشروع تفتحه في الفيجوال استوديو
This media is not supported in your browser
VIEW IN TELEGRAM
الموضوع التالي : شرح طريقة عمل لعبة كما في الفيديو
برمجة تطبيقات الويندوز C# Programming
الموضوع التالي : شرح طريقة عمل لعبة كما في الفيديو
تمهيد قبل شرح الموضوع 👆🏻
ملاحظات مهمه حول الخصائص التالية
Left يسار
Right يمين
Width العرض
Height الارتفاع
Top اعلى
Bottom اسفل
الخاصية Left
تحديد المسافة، بين الحافة اليسرى لعنصر التحكم والحافة اليسرى للحاوية
قيمة الخاصية Left مساوية لخاصية Location.X لقيمة خاصية الموقع لعنصر التحكم.
مثلاً تريد ان تقرب أداة تحكم الى يمينك استخدم الخاصية left
button1.Left += 50;
button1.Location.X += 50; // Error
تؤدي التغييرات التي تم إجراؤها على قيم خاصية Width و Left إلى تغيير قيمة الخاصية Right لعنصر التحكم.
الخاصية Right
الحصول على المسافة ، ، بين الحافة اليمنى لعنصر التحكم والحافة اليسرى للحاوية
ملاحظات
تساوي قيمة الخاصية Right مجموع قيمة الخاصية Left وقيمة الخاصية Width.
الخاصية Right للقراءة فقط read-only
يعني ماينفع تسند لها قيمه
this.Right = 30;
button1.Right = 90;
. يمكنك تغيير قيمة هذه الخاصية بشكل غير مباشر عن طريق تغيير قيمة خصائص اليسار أو العرض أو استدعاء دوال SetBounds أو SetBoundsCore أو UpdateBounds أو SetClientSizeCore.
----------------------------
الخاصية top
اعلى
تحديد المسافة بين الحافة العلوية لعنصر التحكم والحافة العلوية للحاوية
ملاحظات
قيمة الخاصية top مساوية لخاصية Location.Y لقيمة خاصية الموقع لعنصر التحكم.
تؤدي التغييرات التي تم إجراؤها على قيم خاصية الارتفاع والأعلى إلى تغيير قيمة الخاصية الأسفل لعنصر التحكم.
الخاصية Bottom
الأسفل
تعيين المسافة بين الحافة السفلية لعنصر التحكم والحافة العلوية للحاوية
ملاحظات
تساوي قيمة هذه الخاصية مجموع قيمة الخاصية الأعلى وقيمة خاصية الارتفاع.
الخاصية Bottom خاصية للقراءة فقط. يمكنك معالجة قيمة هذه الخاصية عن طريق تغيير قيمة خصائص أعلى أو ارتفاع أو استدعاء دالة SetBounds أو SetBoundsCore أو UpdateBounds أو SetClientSizeCore.
الخاصية Bound
حدود
تعيين حجم و موقع أداة التحكم
أي عند استخدامك لهذه الخاصية فلا حاجة لا ستخدام خاصية size و Location لتحديد حجم و موقع أداة التحكم
صيغة استخدام هذه الخاصية
button1.Bounds = new Rectangle(int X, int Y, int Width, int Height);
يحث يمثل كل وسيط :
X → Location.X
Y → Location.Y
Width → Size.Width
Height → Size.Height
button1.Bounds = new Rectangle(503, 407, 146, 49);
ملاحظات مهمه حول الخصائص التالية
Left يسار
Right يمين
Width العرض
Height الارتفاع
Top اعلى
Bottom اسفل
الخاصية Left
تحديد المسافة، بين الحافة اليسرى لعنصر التحكم والحافة اليسرى للحاوية
قيمة الخاصية Left مساوية لخاصية Location.X لقيمة خاصية الموقع لعنصر التحكم.
مثلاً تريد ان تقرب أداة تحكم الى يمينك استخدم الخاصية left
button1.Left += 50;
button1.Location.X += 50; // Error
تؤدي التغييرات التي تم إجراؤها على قيم خاصية Width و Left إلى تغيير قيمة الخاصية Right لعنصر التحكم.
الخاصية Right
الحصول على المسافة ، ، بين الحافة اليمنى لعنصر التحكم والحافة اليسرى للحاوية
ملاحظات
تساوي قيمة الخاصية Right مجموع قيمة الخاصية Left وقيمة الخاصية Width.
الخاصية Right للقراءة فقط read-only
يعني ماينفع تسند لها قيمه
this.Right = 30;
button1.Right = 90;
. يمكنك تغيير قيمة هذه الخاصية بشكل غير مباشر عن طريق تغيير قيمة خصائص اليسار أو العرض أو استدعاء دوال SetBounds أو SetBoundsCore أو UpdateBounds أو SetClientSizeCore.
----------------------------
الخاصية top
اعلى
تحديد المسافة بين الحافة العلوية لعنصر التحكم والحافة العلوية للحاوية
ملاحظات
قيمة الخاصية top مساوية لخاصية Location.Y لقيمة خاصية الموقع لعنصر التحكم.
تؤدي التغييرات التي تم إجراؤها على قيم خاصية الارتفاع والأعلى إلى تغيير قيمة الخاصية الأسفل لعنصر التحكم.
الخاصية Bottom
الأسفل
تعيين المسافة بين الحافة السفلية لعنصر التحكم والحافة العلوية للحاوية
ملاحظات
تساوي قيمة هذه الخاصية مجموع قيمة الخاصية الأعلى وقيمة خاصية الارتفاع.
الخاصية Bottom خاصية للقراءة فقط. يمكنك معالجة قيمة هذه الخاصية عن طريق تغيير قيمة خصائص أعلى أو ارتفاع أو استدعاء دالة SetBounds أو SetBoundsCore أو UpdateBounds أو SetClientSizeCore.
الخاصية Bound
حدود
تعيين حجم و موقع أداة التحكم
أي عند استخدامك لهذه الخاصية فلا حاجة لا ستخدام خاصية size و Location لتحديد حجم و موقع أداة التحكم
صيغة استخدام هذه الخاصية
button1.Bounds = new Rectangle(int X, int Y, int Width, int Height);
يحث يمثل كل وسيط :
X → Location.X
Y → Location.Y
Width → Size.Width
Height → Size.Height
button1.Bounds = new Rectangle(503, 407, 146, 49);
👍1
برمجة تطبيقات الويندوز C# Programming pinned «تمهيد قبل شرح الموضوع 👆🏻 ملاحظات مهمه حول الخصائص التالية Left يسار Right يمين Width العرض Height الارتفاع Top اعلى Bottom اسفل الخاصية Left تحديد المسافة، بين الحافة اليسرى لعنصر التحكم والحافة اليسرى للحاوية قيمة الخاصية Left مساوية لخاصية Location.X…»
هناك 10 أنواع من الناس في هذا العالم: ,وهم الذين يفهمون ثنائي ، والذين لا يفهمون
برمجة تطبيقات الويندوز C# Programming via @like
هناك 10 أنواع من الناس في هذا العالم: ,وهم الذين يفهمون ثنائي ، والذين لا يفهمون
اخبرنا هل فهمت هذه الجملة ؟
مافهمت 🤔
فهمت 😂
مافهمت 🤔
فهمت 😂
برمجة تطبيقات الويندوز C# Programming
الموضوع التالي : شرح طريقة عمل لعبة كما في الفيديو
Game C#.pdf
308.7 KB
السلام عليكم
الشرح لهذا الموضوع تم عمله في ملف pdf
الشرح لهذا الموضوع تم عمله في ملف pdf
برمجة تطبيقات الويندوز C# Programming via @like
هناك 10 أنواع من الناس في هذا العالم: ,وهم الذين يفهمون ثنائي ، والذين لا يفهمون
بالنسبة للاشخاص الذي لم يفهموا هذه الجملة
للتوضيح
تتكون لغة الحاسب الآلي من رمزين هما1 و0 وتسمى العدد الثنائي
العدد 10 في النظام الثنائي هو 2 في النظام العشري
لم يفهمها الا الاشخاص الذين يعرفوا ماذا يعني ثنائي (Binary) 👍🏻
للتوضيح
تتكون لغة الحاسب الآلي من رمزين هما1 و0 وتسمى العدد الثنائي
العدد 10 في النظام الثنائي هو 2 في النظام العشري
لم يفهمها الا الاشخاص الذين يعرفوا ماذا يعني ثنائي (Binary) 👍🏻
معلومة
عندما تنشئ كلاس يرث من الكلاس Control او من كلاسات أدوات التحكم
فإن الكلاس الخاص بك أي الأداة المخصصة سوف تظهر ضمن قائمة ToolBox
مثال :
class btn:Button
{
}
بهذا الشكل سوف تظهر الأداة btn في ToolBox
ولاكن اذا انت لاتريد ان تظهر في ToolBox ماذا تعمل ؟
الإجابة : قم بكتابة
[ToolboxItem(false)]
فوق الكلاس المخصص
مثال :
[ToolboxItem(false)]
class btn:Button
{
}
عندما تنشئ كلاس يرث من الكلاس Control او من كلاسات أدوات التحكم
فإن الكلاس الخاص بك أي الأداة المخصصة سوف تظهر ضمن قائمة ToolBox
مثال :
class btn:Button
{
}
بهذا الشكل سوف تظهر الأداة btn في ToolBox
ولاكن اذا انت لاتريد ان تظهر في ToolBox ماذا تعمل ؟
الإجابة : قم بكتابة
[ToolboxItem(false)]
فوق الكلاس المخصص
مثال :
[ToolboxItem(false)]
class btn:Button
{
}