إنشاء مفكرتي الخاصة الجزء الثالث

مرحبا بكم في موقع محمد بشير

الدرس الخامس عشر إنشاء مفكرتي الخاصة الجزء الثالث

مرحبا بكم في الدرس الخامس عشر من دروس لغة البرمجة c#
وهذا الدرس هو مواصلة لسلسلة إنشاءمفكرتي الخاصة ويعتبر هذا هو الجزء الثالث من هذه السلسلة
في الدرس الأول قمنا بتعلم كيفية إنشاء القوائم ومربع التحرير هما من أهم العناصر في معظم لغات البرمجة ولا يكاد برنامج يخلو منهما
أما في الدرس الثاني فتعلمنا كيف نقرأ الملفات الموجودة حاليا كما تعلمنا كيف ننشأ ملفا جديدا وكانت نهالك الكثير من الأوامر الجديدة
وقد استخدمنا خاصية File.ReadAllText لقراءة الملفات وهي تمكننا من قراءة محتوى الملف دفعة واحدة وطريقة كتابتها هي كما يلي
string text = File.ReadAllText("arab.txt");
ففي هذا المثال قمنا بقراءة الملف arab.txt وإضافة محتواه للمتغير text
وهنالك طريقة أخر مماثلة تمكننا من قراءة الملف في سطور مفصلة وذلك باستخدام خاصية File.ReadAllLines ويمكن كتابتها كما يلي
string[] lines = File.ReadAllLines("arab.txt");
ففي هذه الحالة قمنا بقراءة الملف arab.txt وإضافتها إلى المتغير المركب أو المتسلسل الذي سميناه باسمlines
ملحوظة إذا قمنا بقراءة الملفات بهذه الطريقة لا يمكننا إضافة محتوى الملف إلى المتغيرات العادية. ولأننا نقوم بقراءة الملف إلى سطور متعددة يجب إضافة هذا المحتوى إلى متغير مركب أو متسلسل كما هو موضح أعلاه
وبعد إضافة المحتوى إلى المتغير المركب فباستخدام هذا المتغير على سبيل المثال يمكننا معرفة عدد السطور التي تم قراءتها أو قراءة أي سطر معين
ولمعرفة عدد السطور فيمكننا استخدام خاصية Length ولتطبيق هذا على المثال السابق فطريقة كتابته هو كما يلي
lines.Length
أما لقراءة سطر معين فيمكننا فعل ذلك بكتابتها على النحو التالي
lines[3]
لقراءة أي سطر فقط يجب علينا كتابة رقم السطر المعين وفي هذه الحالة قمنا بقراءة محتوى السطر الرابع
ملحوظة لأن حساب عدد السطور يبدأ من الرقم 0 لذا إذا أردنا قراءة السطر 5 يجب علينا كتابة الرقم 4 وهذا فقط على سبيل المثال
ملحوظة إذا قمنا بمحاولة قراءة ملف غير موجود فإن البرنامج يتوقف ولا يعمل وتظهر لنا عدة مشاكل لذا من الأفضل قبل قراءة أي ملف التحقق من وجوده أو عدمه وذلك لتجنب المشاكل
ويمكننا التحقق من وجود الملفات والمجلدات باستخدام خاصية Exists
if (File.Exists("arab.txt")) // إذا كان هذا الملف موجودا
{
Console.WriteLine("هذا الملف موجود"); خاصثة Console.WriteLine هي لإظهار الكتابة على الشاشة لكن للأسف باستخدام هذه الخاصية لا تستطيع قارآت الشاشة التعرف عليها وقراءتها
}
else
{
Console.WriteLine("هذا الملف غير موجود");
}
فيجب استخدام هذه الخاصية قبل قراءة وفتح الملفات والمجلدات
أما بخصوص درسنا اليوم فقد قمنا بإضافة إمكانية حفظ الملفات
فقد قمنا بإضافة عنصرين إيلى القائمة الرئيسية
الأول لحفظ الملفات المتاحة حاليلا ومفتاح إختصارها هو مفتاح التحكم مع الحرف s
والعنصر الثاني هو لحفظ ملف باسم جديد أي بمعنى أننا سوف نقوم باستدعاء مربع الحوار الخاص بحفظ الملفات العام والخاص بنظام التشغيل والموجود في الكثير من البرامج

ولتحميل المشروع المستخدم في هذا الدرس الرجاء الضغط على رابط

تحميل مشروع الدرس 15

محتوى ملف form1.designer.cs


// كتابة الحزم الإفتراضية والضرورية لإنشاء النوافذ والأوامر العامة
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO; // إضافة حزمة System.IO. وهي حزمة متخصصة بالتعامل مع الملفات والمجلدات من القراءة والحفظ والنسخ والإنشاء. وعندما نريد التعامل مع الملفات والمجلدات بأي شكل من الأشكال يجب كتابة هذه الحزمة

// كتابة اسم المشروع
namespace sample_project
{ // علامة البداية للمشروع
public partial class Form1 : Form // اسم الإطار العام والذي سميناه باسم Form1
{ // علامة البداية للإطار
public static string filename = ""; // تعيين المتغير باسم filename
public static string foldername = ""; // تعيين المتغير باسم foldername
public Form1()
{
InitializeComponent(); // جعل الإطار Form1 في حالة الوضع الإفتراضي
}
//フالأوامر الخاصة التي نرغب في تنفيذها عند بداية البرنامج أي إنشاء حزمة البداية كما ذكرنا في ملف Form1.Designer.cs
private void form1_Load(object sender, EventArgs e)
{
// إضافة أسماء الملفات والمسارات إلى المتغير المركب أو المسلسل cmds عند فتح البرنامج
string[] cmds = System.Environment.GetCommandLineArgs();
// الحصول على اسم ومسار الف الذي ت فتحه من خلال قيم المتغير المركب أو المسلسل cmds
for (int i = 1; i < cmds.Length; i++) // يبدإ حساب قيم المتغير المركب من الرقم 0. وفي هذه الحالة بدأنا التعرف على القيم من الرقم 1. وذلك بأن القيمة الأولى أو قيمة الرقم صفر تكون هذ اسم ملف التشغيل ومساره
{ // علامة بداية عملية التكرار باستخدام الاسم for
foldername = cmds[i].ToString(); // إضافة القيمة الأخيرة للمتغير المركب cdls إلى المتغير العام foldername.
readfile(); // و readfile هي اسم الحزمة أو الدالة الخاصة التي أنشأناها والخاصة بقراءة الملفات. وعند إنشاء أي حزمة خاصة ونريد إستدعائها من أي مكان فقط نقوم بكتابة اسم الحزمة المراد استخدامها متبوعة بعلامتي ();
} // علامة نهاية عملية التكرار
} // نهاية حزمة البداية
// الدالة الخاصة بكتابة الأوامر التي نرغب في تنفيذها عند الخروج من البرنامج وأيضا قد قمنا بتسميتها بف ملف Form1.Designer.cs
private void Form1_FormClosing(object sender, FormClosingEventArgs e)


{ // علامة بداية حزمة الخروج من البرنامج
checktext(); // إستدعاء الحزمة الخاصة التي قمنا بإنشائها باسم checktext وذلك للتأكد من حدوث أي تغيير على محتوى مربع التحرير الرئيسي
} // علامة النهاية لحزمة الخروج من البرنامج
// الدالة الخاصة بتنفيذ الأوامر عند الضغط على عنصر الخروج من البرنامج والموجود في القائمة الرئيسية private void menuNew_Click(object sender, EventArgs e) // نقوم باستخدام هذا السطر لكتابة الدوال الخاصة لتنفيذ الأوامر عند الضغط على القوائم والأزرار المختلفة. يجب علينا كتابة هذا السطر كما هو فقط يجب علينا تغيير اسم الدالة والذي نقوم بتحديده كما موضح في ملف Form1.Designer.cs. واسم الدالة الخاص بأوامر الخروج من البرنامج هو menuEnd_Click
{ // علامة بداية الدالة
checktext(); // قبل فتح ملف جديد يجب علينا التأكد من حدوث تغير على محتوى مربع التحرير أم لا وذلك باستخدام الحزمة الخاصة checktext
text1.Text = ""; // بعد التأكد نقوم بإفراغ مربع التحرير من كامل محتواه
this.Text = "هذه هي مفكرتي"; // نقوم باستبدال عنوان البرنامج بالكلمة التي نريد كما هو موضح بين علامتي التنصيص
text1.Modified = false; // خاصية Modified هي إحدى خصائص مربعات التحرير. وتمكننا من التعرف على حدوث تغيير في مربعات التحرير المختلفة أم لا. فإذا حدث تغيير تكون مفعلة أي true. وإذا لم يحدث أي تغيير تكون معطلة أي false. وفي هذه الحالة يجب جعلها في وضع التعطيل
filename = ""; // إفراغ محتوى المتغير filename
foldername = ""; // إفراغ محتوى المتغير foldername
} // علامة الخروج من الدالة
// الدالة الخاصة بتنفيذ الأوامر عند الضغط على عنصر الخروج من البرنامج والموجود في القائمة الرئيسية
private void menuOpen_Click(object sender, EventArgs e) // نقوم باستخدام هذا السطر لكتابة الدوال الخاصة لتنفيذ الأوامر عند الضغط على القوائم والأزرار المختلفة. يجب علينا كتابة هذا السطر كما هو فقط يجب علينا تغيير اسم الدالة والذي نقوم بتحديده كما موضح في ملف Form1.Designer.cs. واسم الدالة الخاص بأوامر الخروج من البرنامج هو menuEnd_Click
{ // علامة بداية الدالة
checktext(); // قبل فتح ملف جديد يجب علينا التأكد من تغير محتوى مربع التحرير الحالي
//إنشاء مربع حوار عام أي بمعنى هو أحد وظائف النظام. وقمنا بتسميته باسم OpenFileDialog1
OpenFileDialog openFileDialog1 = new OpenFileDialog(); // محوظة يمكن كتابة خصائص مربع فتح الملفات العام كسائر العناصر الأخرى في ملف Form1.Designer.cs
// كتابة عنوان مربع الحوار الخاص بفتح الملفات

openFileDialog1.Title = "قم باختيار اسم الملف";
// تعيين مسار كمسار إفتراضي عند إستدعاء هذا المربع. وفي الوضع الإفتراضي هو غير معين. وفي حالة عدم التعيين يتم حفظ مسار آخر مجلد تم فتحه
// openFileDialog1.InitialDirectory = @"C:\";
// تعيين اسم ملف إفتراضي عند إستدعاء هذا المربع. وفي الوضع الإفتراضي هو غير مفعل. وننصح بعدم تفعيله إلا في بعض الحالات الخاصة
// openFileDialog1.FileName = "قم بكتابة اسم الملف الإفتراضي هنا";
// تعيين إمتدادات الملفات التي نرغب في التعامل معها
openFileDialog1.Filter = "ملفات txt|*.txt|ملفات RTF|*.RTF|كافة الملفات|*.*"; // في هذه قمنا تعيين كل من إمتداد txt و rtf والخيار الثالث خيار لكافة الملفات
// تعيين الإمتداد الإفتراضي عند استدعاء هذا المربع. والوضع الإفتراضي هو أن يتم إختيار العنصر الأول
// openFileDialog1.FilterIndex = 1;
// وقبل الخروج من هذا المربع الحفظ التلقائي لمسار المجلد الحالي. والوضع الإفتراضي هو معطل
openFileDialog1.RestoreDirectory = true; // هذه الخاصية ضرورية وذلك لحف آخر مجلد تم فتحه تلقائيا
// السماح بخاصية إمكانية إختيار أكثر من ملف واحد في نفس الوقت. والوضع الإفتراضي هو معطل
// openFileDialog1.Multiselect = true; // بتفعيل هذه الخاصية نتمكن من إختيار أحثر من ملف في وقت واحد. لكن لقراءة كافة الملفات التي تم إختيارها يجب إضافة الكود الخاص بقراءة أكثر من ملف واحد
// إظهار زر المساعدة عند إستدعاء هذا المربع. والوضع الإفتراضي هو معطل
// openFileDialog1.ShowHelp = true;
// إظهار مربع تحديد لتعيين إمكانية السماح بالقراء والتحرير للملفات أم جعلها صالحة للقراءة فقط بدون تعديل. والوضع الإفتراضي هو معطل
// openFileDialog1.ShowReadOnly = true;
// openFileDialog1.ReadOnlyChecked = true;
// إذا تم إختيار اسم ملف غير موجود يتم إظهار رسالة تحذيرية. والوضع الإفتراضي هو مفعل
//openFileDialog1.CheckFileExists = true;
// إظهار رسالة تحذيرية عند تعيين مسار غير موجود. والوضع الأفتراضي هو مفعل
//openFileDialog1.CheckPathExists = true;
// تفعيل إمكانية التعرف على إمتداد الملفات بصورة تلقائية. والوضع الإفتراضي هو مفعل
openFileDialog1.AddExtension = true;
// عدم فتح الملفات التي تحتوي أسماءها على بعض الرموز التي لا يسمح باستخدامها. والوضع الإفتراضي هو مفعل
//openFileDialog1.ValidateNames = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK) // بعد إختيار الملف المراد فتحه والضغط على زر فتح بنجاح
{ // علامة بداية لعملية إذا الشرطية أي if
if (openFileDialog1.FileName.Length > 9) // التأكد من أن اسم الملف ومساره الذي تم إختيارهما يحتوي على أكثر من 9 حروف.
{ // علامة بداية عملية if
foldername = openFileDialog1.FileName; // إضافة المسار واسم الملف الذي تم إختياره إلى المتغير foldername
readfile(); // وبعد التعرف على اسم ومسار الملف نقوم باستدعاء الحزمة الخاصة التي أنشأناها لقراءة الملفات
} // علامة نهاية عملية if
}
// وبعد إكمال العملية يجب إغلاق هذا المربع
openFileDialog1.Dispose();
} // علامة نهاية حزمة فتح الملفات
void readfile() // الحزمة الخاصة التي أنشأناها لقراءة الملفات
{ // علامة بداية الحزمة
filename = Path.GetFileName(foldername); // باستخدام خاصية Path.GetFileName نتمكن وبكل يسر وسهولة من الحصول على اسم الملف مع إمتداده من المسارات المختلففة للمجلدات. وفي هذه الحالة قمنا بإضافة اسم الملف الذي تم فتح فقط بدون المسار إلى المتغير filename>. وذلك حتى نتمكن من إضافة اسم الملف الذي تم فتحه إلى عنوان البرنامج بدون كامل المسار
//filename = Path.GetFileNameWithoutExtension(foldername); // وبنفس الطريقة ولكن باستخدام خاصية Path.GetFileNameWithoutExtension يمكننا الحصول على اسم الملف فقط بدون الإمتداد
this.Text = filename; // إضافة اسم الملف إلى عنوان البرنامج
// ولأن طريقة قراءة ملفات .rtf مختلفة يجب علينا التعرف على نوع الملف الذي تم إختياره. ويمكننا ذلك باستخدام خاصية EndsWith. ومن خلال هذه الخاصية يمكننا البحث عن آخر كلمة أو حرف
if (foldername.EndsWith(".txt")) // إذا كان آخر المسار الموجود في محتوى المتغير foldername هو .txt أي ملف نصي
{
text1.Text = File.ReadAllText(foldername); // نقوم بقراءة محتوى الملف الذي تم إختياره دفعة واحدة وذلك باستخدام خاصية File.ReadAllText وهي أسرع وسيلة لقراءة الملفات في لغة c#. وبعد قراءة الملف قمنا بإضافة محتوى الملف هذا إلى مربع التحرير
} else if (foldername.EndsWith(".rtf")) // وإذا كان الملف هو ملف rtf
{
text1.LoadFile(foldername); // نقوم بقراءة محتوى الملف وذلك باستخدام خاصية LoadFile وهي لا تستخدم إلا مع مللفات rtf فنرجوا عدم استخدام هذه الخاصية مع أي ملفات أخرى
} else { // أذا كان الملف الذي تم إختياره غير المذكور أعلاه
text1.Text = File.ReadAllText(foldername); // نقوم باستخدام خاصية File.ReadAllText لقراءة الملفات الأخرى
}
text1.SelectionStart = 0; // SelectionStart هي إحدى خصائص مربعات التحرير وهي تؤشر إلى نقطة وجود المؤشر على مربع التحرير. وفي هذه الحالة قمنا بجعل المؤشر في أول حرف في مربع التحرير. ملحوظة حساب مربعات التحرير يبدأ من الرقم 0
text1.Focus(); // تستخدم خاصية Focus لتحديد المؤشر على أي عنصر من عناصر الويندوز. فمثلا إذا كانت لدينا 4 أزرار أو مربعات تحرير فباستخدام خاصية Focus يمكننا تعيين العنصر الذي نرغب في الإنتقال إليه أي بمعنى جعل المؤشر يقف عليه
// الإنتقال بالمؤشر إلى السطر الأو من مربع التحرير
text1.ScrollToCaret(); // ScrollToCaret هي إحدى خصائص مربعات التحرير ومن خلالها يمكننا الإنتقال من مكان لآخر
text1.Modified = false; // جعل خاصية Modified في وضع التعطيل
}
// حزمة حفظ الملفات
private void menusave_Click(object sender, EventArgs e) // نقوم باستخدام هذا السطر لكتابة الدوال الخاصة لتنفيذ الأوامر عند الضغط على القوائم والأزرار المختلفة. يجب علينا كتابة هذا السطر كما هو فقط يجب علينا تغيير اسم الدالة والذي نقوم بتحديده كما موضح في ملف Form1.Designer.cs. واسم الدالة الخاص بأوامر الخروج من البرنامج هو menuEnd_Click
{ // علامة بداية الدالة
save(); // هذه هي حزمة خاصة أنشأناها لحفظ الملفات
}
//حزمة حفظ الملفات باسم
private void menusaveas_Click(object sender, EventArgs e) // نقوم باستخدام هذا السطر لكتابة الدوال الخاصة لتنفيذ الأوامر عند الضغط على القوائم والأزرار المختلفة. يجب علينا كتابة هذا السطر كما هو فقط يجب علينا تغيير اسم الدالة والذي نقوم بتحديده كما موضح في ملف Form1.Designer.cs. واسم الدالة الخاص بأوامر الخروج من البرنامج هو menuEnd_Click
{ // علامة بداية الدالة
saveas();// هذه حزمة خاصة أنشأناها لحفظ الملفات بأسم جديد
}
private void saveas() // حظمة حفظ الملفات باسم جديد
{
// إنشاء مربع الحفظ العام
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
// تعيين عنوان مربع الحفظ
saveFileDialog1.Title = "أكتب اسم الملف";
// تعيين المجلد الإفتراضي للحفظ
// saveFileDialog1.InitialDirectory = @"C:\";
// تعيين ملف الحفظ الإفتراضي
// saveFileDialog1.FileName = "ここに初期表示するファイル名を書いてください";
// تعيين إمتدادات الحفظ
saveFileDialog1.Filter = "ملفات txt|*.txt|ملفات RTF|*.RTF|كافة الملفات|*.*";
// تعيين الرقم المسلسل للإمتدادات
saveFileDialog1.FilterIndex = 1;
// الحفظ التلقائي لآخر مجلد تم حفظه
saveFileDialog1.RestoreDirectory = true;
// إظهار زر المساعدة
// saveFileDialog1.ShowHelp = true;
// إظهار رسالة إستفهام عند حفظ ملف موجود سلفا. والوضع الإفتراضي هو تفعيل
//saveFileDialog1.OverwritePrompt = true;
// إظهار رسالة تحذيرية عند محاولة حفظ ملف غير موجود. والوضع الإفتراضي هو معطل
//saveFileDialog1.CheckFileExists = true;
// إظهار رسالة تحذيرية عند محاولة حفظ في مجلد غير موجود. والوضع الإفتراضي هو مفعل
saveFileDialog1.CheckPathExists = true;
// تعيين الإمتدادات بصورة تلقائية
//saveFileDialog1.AddExtension = true;
// حفظ أسماء الملفات المتوافقة مع النظام فقط. والوضع الإفتراضي هو مفعل
//saveFileDialog1.ValidateNames = true;
// إظهار مربع حفظ الملفات
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
foldername = saveFileDialog1.FileName; // إضافة اسم الملف المراد حفظه ومساره إلى المتغير foldername
filename = Path.GetFileName(foldername); // باستخدام خاصية Path.GetFileName نتمكن وبكل يسر وسهولة من الحصول على اسم الملف مع إمتداده من المسارات المختلففة للمجلدات. وفي هذه الحالة قمنا بإضافة اسم الملف الذي تم فتح فقط بدون المسار إلى المتغير filename>. وذلك حتى نتمكن من إضافة اسم الملف الذي تم فتحه إلى عنوان البرنامج بدون كامل المسار
//filename = Path.GetFileNameWithoutExtension(foldername); // وبنفس الطريقة ولكن باستخدام خاصية Path.GetFileNameWithoutExtension يمكننا الحصول على اسم الملف فقط بدون الإمتداد
this.Text = filename; // إضافة اسم الملف إلى عنوان البرنامج
save(); // بعد تحديد اسم الملف المراد حفظه ومساره نقوم باستدعاء الحزمة الخاصة بحفظ الملفات
}
// غلق مربع حفظ الملفات
saveFileDialog1.Dispose();
}
private void save() // الحزمة الخاصة بحفظ الملفات
{
if (foldername == "") { // التحقق من وجود ملف متاح حاليا تم حفظه أو فتحه في السابق. فإذا لم يكن هنالك ملف متاح حاليا نقوم باستدعاء حزمة حفظ الملفات باسم وهي حزمة خاصة لإظهارمربع حفظ الملفات. ويمكننا التأكد من وجود ملف حالي بالتحقق من اسم المسار هل هو موجود أم لا
saveas();// في حالة عدم وجود ملف متاح حاليا نحتاج نقوم باستدعاء حزمة الحفظ باسم الخاصة بفتح مربع حفظ الملفات العامة
} else { // وإذا كان هنالك ملف متاح حاليا نقوم بإعادة حفظ الملف
// ولأن طريقة قراءة ملفات .rtf مختلفة يجب علينا التعرف على نوع الملف الذي تم إختياره. ويمكننا ذلك باستخدام خاصية EndsWith. ومن خلال هذه الخاصية يمكننا البحث عن آخر كلمة أو حرف في الجملة
if (foldername.EndsWith(".rtf")) // وإذا كان الملف هو ملف rtf
{
text1.SaveFile(foldername); // نقوم بحفظ محتوى مربع التحرير الحالي إلى الملف وذلك باستخدام خاصية SaveFile وهي لا تستخدم إلا مع مللفات rtf فنرجوا عدم استخدام هذه الخاصية مع أي ملفات أخرى
} else { // إذا كان الملف المراد حفظه غير ملفات .rtf
// حفظ الملفات بصيغة utf8
string r2 = text1.Text; // قبل حفظ الملف نقوم بإضافة محتوى مربع التحرير إلى المتغير r2 . وهي خطوة غير إلزامية وسوف نعرف السبب حالا
string body = r2.Replace("\n", "\r\n"); // أولا استعملنا هنا خاصية جديدة وهي خاصية Replace وهي خاصية لاستبدال كلمة مكان كلمة أخرى. وطريقة كتابتها كما هو موضح نقوم بكتابة اسم المتغير أو المحتوى الذي نرغب في إجراء الاستبدال فيه. وفي هذه الحالة هو المتغير r2 والذي قد أضفنا له محتوى مربع التحرير كاملا. ومن ثم نقوم بكتابة نقطة ثم اسم الخاصية وهي Replace. وبين القوسين يكون لنا نصين نفصل بينهما بفاصلة . وتكون الكلمة الألى هي المراد استبدالها. والكلمة الثانية هي الكلمة الجديدة التي نريد الاستبدال بها. وفي حالتنا هذه الكلمة الأولى هي رمز \n بين علامتي تنصيص وهذا الرمز هو أحد الرموز التي تمكننا من فتح سطر جديد. والكلمة الثانية هي رمز مشابه وهو \r\n وهو أيضا رمز يستخدم لفتح سطر جديد. والفرق بين الرمزين هو أن الرمز الأول وهو الرمز الإفتراضي في عنصر RichTextBox الذي نستخدمه في مربع التحرير في هذا البرنامج يقوم بفتح سطر جديد لكن بالنسبة لنا تظهر لنا السطور متواصلة في نفس السطر الواحد مع مجود علامة فراغ السطر داخل السطر الواحد. ملحوظة في حالة العنصرين EditControl و TextBox يكون رمز فتح السطر الإفتراضي هو الرمز الثاني في هذا المثال لذا لا نحتاج إلى عملية الاستبدال هذه. كما لا يفوتني فقد قمنا بإضافة القيمة الجديدة المستبدلة إلى المتغير والذي سميناه
body
File.WriteAllText(foldername, body); // حفظ المحتوى إلى الملف
}
}
text1.Modified = false; // بعد الحفظ نقوم بتعطيل خاصية Modified
}
// الدالة الخاصة بتنفيذ الأوامر عند الضغط على عنصر الخروج من البرنامج والموجود في القائمة الرئيسية
private void menuEnd_Click(object sender, EventArgs e) // نقوم باستخدام هذا السطر لكتابة الدوال الخاصة لتنفيذ الأوامر عند الضغط على القوائم والأزرار المختلفة. يجب علينا كتابة هذا السطر كما هو فقط يجب علينا تغيير اسم الدالة والذي نقوم بتحديده كما موضح في ملف Form1.Designer.cs. واسم الدالة الخاص بأوامر الخروج من البرنامج هو menuEnd_Click
{ // علامة بداية الدالة
this.Close(); // خاصية Close وتستخدم لإغلاق النوافذ
this.Dispose(); // خاصية Dispose وتستخدم لإغلاق النوافذ مع حزف جميع إشعارات البرنامج من النظام
} // علامة الخروج من الدالة
public void checktext() // الحزمة الخاصة التي قمنا بإنشائها للتحقق من حدوث تغيير في مربع التحرير أم لا
{
//hالتحقق من حدوث أي تغيير في مربع التحرير text1
if (text1.Modified == true) // إذا كانت خاصية Modified في وضع التفعيل أي بمعنى حدوث تغيير ما على محتوى مربع التحرير
{
//إظهار مربع حوار لمعرفة هل يرغب المستخدم في حفظ المحتوى الحالي أم لا
DialogResult result = MessageBox.Show("قد تم تحديث هذا النص. هل ترغب في حفظ المحتوى الحالي",
"حفظ النص",
MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1);
//للتعرف على ما تم إختياره
if (result == DialogResult.Yes)
{
// إذا كان الإختيار نعم فسوف نقوم باستدعاء حزمة حفظ الملفات هنا.
save();
return;
}
else if (result == DialogResult.No) // وإذا كان الإختيار بلا فيتم إلغاء الأمر
{
return;
}
}
}
} // علامة نهاية الإطار العام Form1
} //علامة نهاية المشروع
وفي الختام نتمنا مراجعة محتوى هذا الدرس بصورة جيدة حتى يسهل علينا الاستمرار في الدروس القادمة
كما يسرني استقبال أسألتكم وذلك من خلال المنتدى العام أو من خلال مجموعة البريد الإلكتروني

للذهاب إلى صفحة المتدى العام الرجاء الضغط على رابط


المنتد العام


وللإشتراك في مجموعة البريد الإلكتروني الرجاء الضغط على



الإشتراك بمجموعة البريد الإلكتروني وإلغاء الإشتراك


ولمعرفة المزيد عن مجموعة البريد الإلكتروني الرجاء الضغط على رابط


معلومات عن مجموعة البريد الإلكتروني