صفحه اصلی / دوره‌های آموزشی / آموزش ویندوز فرم سی شارپ، مقدماتی / ساخت برنامه ویرایشگر فارسی-بخش دوم

ساخت برنامه ویرایشگر فارسی-بخش دوم

ساخت برنامه ویرایشگر فارسی-بخش دوم
براي خريد اين درس نياز است وارد سايت شويد. در صورت نداشتن حساب کاربري عضو شويد.
رایگان

جلسات دوره


          
22 دقیقه
رایگان
           
مهدی احمدی
مدرس:

مهدی احمدی

از سال 1380 برنامه نویسی را شروع کرده و از سال 90 در این زمینه تدریس میکنم .با زبانهای سی پلاس پلاس ، سی ،پاسکال ،VB ، سی شارپ ،اسمبلی، جاوا و .... کار کرده و آنها را تدریس کرده ام.هم اکنون نیز مشغول تدریس در دانشگاه هستم و مدتی است با سایت درسمن همکاری میکنم مشاهده رزومه

ساخت برنامه ویرایشگر فارسی-بخش دوم
 
در جلسه قبل ظاهر برنامه را ساختیم و کد های مربوط به گزینه های قالب بندی و ویرایش نوشته شدند. در این جلسه میخواهیم کد های مربوط به گزینه‌ی پرونده را بنویسیم .

پرونده_خروج:
کد این گزینه Exit()هست که در جلسات قبل گفته شده است.
private void خروجToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
پرونده_ذخیره جدید:
ذخیره جدید به این معنی که اگر قبلا فایل ذخیره شده بود یک فایل جدید ساخته شود.
ابتدا یک Save File Dialog به Form اضافه میکنیم و به قسمت کد نویسی مربوط به ذخیره جدید میرویم.
Save File Dialog را به کاربر نمایش میدهیم و اگر ok کرد متن موجود در کادر متن را در جایی که کاربر انتخاب کرده ذخیره شود که از کلاس File متد Writealltext() استفاده میکنیم.
این متد دو پارامتر از ما میگیرد،اول مسیر ذخیره سازی و دیگری متنی که قرار است نوشته شود.
مسیر ذخیره سازی را از  savefiledialog میگیرم.
در پارامتر دوم بجای  متنی که قرار است ذخیره شود، txtmatn.text قرار میدهیم تا هر متنی که در کادر متن قرار داشت ذخیره کند.

private void فایلجدیدToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            { 
                System.IO.File.WriteAllText(saveFileDialog1.FileName,txtmatn.Text);
            }
        
 
در برنامه لازم داریم که  نام فایلمان را هم بدانیم چرا که بعدا میخواهیم کد ذخیره  کردن فایل را هم بنویسیم و باید بدانیم ،متنی که وجود دارد روی کدام فایل باید ذخیره شود پس باید یک متغییر داشته باشیم که نام فایلمان در آنجا ذخیره کنیم، و یک متغییر از نوع متنی به اسم filename درست میکنم که در ابتدا هیچ مقداری  نداشته باشد.
توجه داشته باشد که این متغییر‌ها را  بعد از class form1 قرار دهید و درون هیچ متد دیگری قرار نگیرد.
public partial class Form1 : Form
    {
        string filename = "";
بعد از اینکه  متغییر را تعریف کردیم آن را مقدار دهی میکنیم.
private void بازکردن ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                System.IO.File.WriteAllText(saveFileDialog1.FileName, txtmatn.Text);
                filename = saveFileDialog1.FileName;
            }
        }
به یک متغییر دیگر از نوع bool به نام seved با مقدار   true همانند متغییر بالا تعریف میکنیم.
public partial class Form1: Form
    {
        string filename = "";
        bool seved = true;
و در رویداد فایل جدید هم مقدار seved را true قرار دهیم.برای اینکه بدانیم تغییراتی که انجام داده‌ایم ذخیره شده‌اند.
private void فایلجدیدToolStripMenuItem_Click(object sender,EventArgs e)
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                System.IO.File.WriteAllText(saveFileDialog1.FileName,txtmatn.Text);
                filename = saveFileDialog1.FileName;
                seved = true;
            }
        }
 
پرونده_ذخیره:
ذخیره به این صورت عمل میکند که وقتی ما در زمان اجرا روی دکمه ذخیره کلیک میکنیم باید این متن که در کادر متن هست در  فایلی که الان باز هست ذخیره شود. اگر قبلا ذخیره نشده ذخیره را  کلیک کردم باید یک آدرس و نام جدید از کاربر بگیرد و اگر قبلا این فایل ذخیره شده بر روی آن فایل ذخیره کند.
برای این کار میتوانیم از متغییر filename که در که در رویداد ذخیره جدید تعریف کردیم استفاده کنیم
به این صورت که اگر filename مقدار خالی داشته باشد یعنی اگر کاربر در ابتدای برنامه باشد  از کاربر آدرس ونام فایل را گرفته شود ولی اگر filename دارای مقدار باشد این فایل قبلا ذخیره شده و باید بر روی همان دوباره ذخیره کند.
در form بر روی ذخیره کلیک میکنیم و به قسمت کد نویسی می‌رویم.
یک شرط قرار میدهیم که filename برابر خالی است یا خیر ،اگر خالی بود پنجره ذخیره را به کاربر نمایش می دهد.
private void ذخیرهToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (filename == "")
            {
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    System.IO.File.WriteAllText(saveFileDialog1.FileName, txtmatn.Text);
                    filename - saveFileDialog1.FileName;
                    saved = true;
                }
            }
        }
اگر فایل ما قبلا ذخیره شده باشد این فایل را بر روی فایل خودش ذخیره کند.
            else
            {
                System.IO.File.WriteAllText(filename, txtmatn.Text);
                saved = true;
            }
        }
 
پرونده_بازکردن:
با این گزینه میتوانیم فایل ‌هایی را که قبلا ذخیره کردیم را باز کنیم و متن آن فایل را در این کادر متن به کاربر نمایش دهیم.
به رویداد پیش فرض گزینه باز کردن میرویم.
برای بازکردن، ابتدا باید بدانیم که متن داخل textbox   قبلا ذخیره شده است یا خیر اگر ذخیره نشده از کاربر بپرسیم که آیا  تغییرات را ذخیره کند یا خیر، اگر کاربر تایید کرد تغییرات فعلی را ذخیره کند و یک آدرس جدید از کاربر بگیرید و آن فایل را باز کند و را در این کادر متن نمایش دهید.
private void بازکردنToolStripMenuItem_Click(object sender, EventArgs e)
     {
         if (saved == false)
         {
             DialogResult dr = new DialogResult();
             dr = MessageBox.Show("آیا میخواهید ذخیره کنید.", "اخطار", MessageBox.YesNoCancel);
             if (dr == DialogResult.Yes)
             {
                 if (filename == "")
                 {
                     if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                     {
                      System.IO.File.WriteAllText(saveFileDialog1.FileName,txtmatn.Text);
                      filename = saveFileDialog1.FileName;
                      saved = true;
                     }   
                 }
                 else
                 {
                     System.IO.File.WriteAllText(filename, txtmatn.Text);
                     
                     saved = true;
                 }
             }
          }
اگر که کاربرNo را کلیک کرد فقط باید کد باز کردن فایل را به کاربر نمایش دهیم.
if (dr == DialogResult.No)
          {
                   if (openFileDialog1.ShowDialog() == DialogResult.OK)
                   {
                    txtmatn.Text = System.IO.File.ReadAllText(openFileDialog1.FileName);
                    filename = openFileDialog1.FileName;
                    saved = true;
                   }
                   else
                   { 
                    if (openFileDialog1.ShowDialog() == DialogResult.OK)
                     {
                     txtmatn.Text = System.IO.File.ReadAllText(openFileDialog1.FileName);
                     filename = openFileDialog1.FileName;
                     saved = true;
                 }

کد هایی که در بالا نوشته شد برای  حالتی بود که فایل ما ذخیره نشده باشد ولی اگر فایل ما ذخیره شده باشد فقط باید فایل ما باز شود.
else
           {
               if (openFileDialog1.ShowDialog() == DialogResult.OK)
               {
                   txtmatn.Text = System.IO.File.ReadAllText(openFileDialog1.FileName);
                   filename = openFileDialog1.FileName;
                   saved = true;
               }
                
                
           }
        }        
   }
توجه: مشکلی که در کد های بالا وجود دارد این است که وقتی ما متن را تغییر می‌دهیم باید بدانیم که این تغییر اعمال شده است، یعنی باید در رویداد textchenge کادر متن متغییر seved را برابر با false قرار دهیم.
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            seved = false;
        }
 
پرونده_فایل جدید:
کار فایل جدید به این صورت است که کادر متن و متغییر filename را خالی کند و متغییر saved هم برابر true کند، یعنی تا این قسمت از برنامه  چیزی به اسم فایل جدید نداریم که ذخیره نشده باشد میخواهیم فایلی جدید باز کنیم که فعلا ذخیره نشده است .
private void فایلجدیدToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            txtmatn.Text = "";
            filename = "";
            seved = true;
        }
 

نظرات دانشجویان

نظر شما در تصمیم دیگران اثرگذار است.

لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.

برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.
ثبت نام

62