کنترل SaveFileDialog

کنترل System.Windows.Forms.SaveFileDialog به شما اجازه می دهد که یک فایل را ذخیره یا متنی را در یک فایل بنویسید. این کنترل همچنین به شما اجازه می دهد که در بین پوشه های موجود در سیستم خود یک پوشه را انتخاب کرده ، سپس نام فایلی که قصد دارید اطلاعاتی را در آن قرار دهید را بنویسید. زمانی که نام فایلی که در پوشه جاری پنجره قرار دارد را بنویسید یک پیغام خطا نمایش داده می شود مبنی بر اینکه اطلاعات موجود در فایل دوباره نویسی می شود(overwrite) . همچنین می توانید مسیر کامل فایل را در داخل جعبه متنی که در قسمت پایین آن قرار دارد بنویسید.
dialogs-04
در زیر تعدادی از خاصیت های مفید این کنترل را مشاهده می کنید.

خاصیت توضیح
AddExtention تعیین می کند که هنگامی که کاربر نام یک فایل بدون پسوند را تایپ می کند یک پسوند به طور خودکار به ان اضافه شود یا نه
CheckFileExists تعیین می کند زمانی که کاربر نام یک فایل را که وجود ندارد می نویسد یک پنجره ی اخطار به او نمایش داده شود یا نه
CheckPathExists تعیین می کند زمانی که کاربر مسیری که وجود ندارد را می نویسد یک پنجره ی اخطار به او نمایش داده شود یا نه
DefaultExt پسوند پیشفرض . زمانی که کاربر نام فایل را بدون پسوند بنویسد به طور خودکار به نام فایل اضافه می شود.
FileName فایلی که توسط کاربر انتخاب شده است.
Filter با استفاده از این خاصیت می توانید لیست فایل های داخل پنجره را فیلتر کنید.
FilterIndex اگر فیلتر های متفاوتی در دسترس باشد ، با استفاده از این خصوصیت می توانید تعیین کنید که کدام فیلتر به پنجره اعمال شود
InitialDirectory دایرکتوری پیشفرضی که هنگام نمایش پنجره در آن قرار داریم را تعیین می کند.
OverwritePrompt زمانی که فایل مورد نظر شما در پنجره موجود باشد یک پیغام به شما نمایش داده می شود
Title عنوان پنجره

خاصیت AddExtension به طور خودکار زمانی که کاربر فایل بدون پسوندی را بنویسد ، پسوندی که در خاصیت DefaultExt قرار دارد را به آن اضافه می کند. توصیه می شود که مقدار دو خاصیت CheckFileExists و CheckPathExists را برابر true قرار دهید تا زمانی که فایل یا مسیر مشخصی وجود ندارد ، به کاربر اخطاری نمایش داده شود. خصوصیت InitialDirectory تعیین کننده پوشه پیشفرضی است که هنگام نمایش دیالوگ در آن قرار داریم. خصوصیت Title نمایانگر متنی است که در عنوان دیالوگ قرار دارد.

 

مشخص کردن نوع فایل

می توان نوع فایل را تعیین کرد. برای این کار از خاصیت Filter استفاده می شود.این خاصیت یک رشته حاوی الگوی خاص را به عنوان مقدار می پذیرد به عنوان مثال ، تعیین می کنیم که فایلی که قصد ذخیره آن را داریم از نوع متنی می باشد . خاصیت Filter باید دارای یک الگوی خاص باشد.

Description1|Extension1|Description2|Extention2|...DescriptionN|ExtentionN

ابتدا برای نوع فایل یک توضیح می نویسیم. در ادامه یک کاراکتر | و سپس نوع فایل را می نویسیم. به عنوان مثال الگوی زیر به شما اجازه می دهد که فایل را فقط به صورت متنی ذخیره کنید.

Text Files|.txt

شرح فایل در مثال بالا برابر Text Files و پسوند آن برابر txt. است. این امکان وجود دارد که چندین پسوند را مشخص کنید.به عنوان نمونه الگوی زیر به شما اجازه می دهد که یک فایل را به متنی با پسوند txt. با به صورت تصویری با پسوند png. ذخیره کنید.

Text Files|*.txt|Image|*.png

نوع فایل را از کامبو باکسی که در زیر جعبه متن نام فایل قرار دارد انتخاب می کنید.
save-file-dialog-01

 

یک مثال از کاربرد کنترل SaveFileDialog

اجازه دهید یک برنامه نمونه که در آن از قابلیت های کنترل SaveFileDialog استفاده شده است را طراحی کنیم. برنامه به کاربر اجازه می دهد که محتوای یک جعبه متن چند خطی را در یک فایل متنی که به وسیله این کنترل انتخاب می شود قرار دهد. ابتدا توجه کنید که کد زیر را به لیست فضای نامی های کلاس اضافه کنید.

using System.IO;

یک فرم شبیه فرم زیر طراحی کنید. از جعبه متنی که خاصیت mutiline آن برابر true است استفاده کنید. یک کنترل SaveFileDialog را از قسمت Dialogs جعبه ابزار بر روی بکشید.
save-file-dialog-02
بر روی دکمه دوبار کلیک کنید تا کنترل کننده رویداد کلیک آن ایجاد شود. به شکل زیر کد های مشابه را در کنترل کننده رویداد قرار دهید.

   1: private void button1_Click(object sender, EventArgs e)
   2: {
   3:     //Specify the extensions allowed
   4:     saveFileDialog1.Filter = "Text File|.txt";
   5:     //Empty the FileName text box of the dialog
   6:     saveFileDialog1.FileName = String.Empty;
   7:     //Set default extension as .txt
   8:     saveFileDialog1.DefaultExt = ".txt";
   9: 
  10:     //Open the dialog and determine which button was pressed
  11:     DialogResult result = saveFileDialog1.ShowDialog();
  12: 
  13:     //If the user presses the Save button
  14:     if (result == DialogResult.OK)
  15:     {
  16:         //Create a file stream using the file name
  17:         FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
  18: 
  19:         //Create a writer that will write to the stream
  20:         StreamWriter writer = new StreamWriter(fs);
  21:         //Write the contents of the text box to the stream
  22:         writer.Write(textBox1.Text);
  23:         //Close the writer and the stream
  24:         writer.Close();
  25:     }
  26: }

خط 4 تعیین می کند که کاربرد فقط می تواند محتوای جعبه متنی را در یک فایل متنی قرار دهد. خط 6 مقدار empty را به خصوصیت FileName نسبت می دهد تا در زمان نمایش هیچ فایلی به طور پیشفرض انتخاب نشود. مقدار خاصیت DefaultExt را برابر .txt قرار داده ایم تا اگر کاربر پسوند فایل مورد نظر خود را فراموش کند برنامه به طور خودکار این پسوند را به انتهای نام فایل اضافه کند. سپس با استفاده از متد ()ShowDialog پنجره را نمایش می دهیم. خروجی این متد از نوع DialogResult است.
هنگامی که کاربر بر روی دکمه Save کلیک می کند خروجی متد برابر DialogResult.OK می شود (خط 14). با استفاده از دستور if خروجی متد را بررسی می کنیم، اگر کاربر بر روی OK کلیک کرد سپس در خط 17 یک شی از کلاس FileStream ساخته و خاصیت های FileName و FileMode آنرا تنظیم کرده ایم. این خط در اصل مسئول ایجاد یک فایل متنی با نامی است که ما در کادر FileName پنجره saveFileDialog مشخص کرده ایم. سپس یک شی از کلاسStreamWriter ساخته و شی FileStream قبلی را به آن انتقال می دهیم. با این کار به برنامه می گوییم که قرار است در فلان فایل عمل نوشتن صورت بگیرد.
با استفاده از متد ()Write متن موجود در جعبه متن را در استریم یا همان فایلی که ایجاد کرده ایم نوشته و سپس با استفاده از متد ()Close استریم را می بندیم. برنامه را اجرا و متنی را داخل جعبه متن بنویسید. بر روی دکمه کلیک کنید و یک پوشه را انتخاب کنید.سپس نام یک فایل را بنویسید و بر روی دکمه Save پنجره کلیک کنید. اگر فایلی با همان نام نوشته شده توسط شما موجود باشد یک پیغام به شما نمایش داده می شود.در صورت تایید پیغام، محتوای آن فایل کاملا حذف و محتوای جدید به جای آن قرار می گیرد. اگر مقدار خاصیت OverwritePrmpt را برابر false قرار دهید پیغام خطا نمایش داده نمی شود .

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. محمد پاسخ دادن

    سلام
    فقط همینو میگم سایت خیلی شیک ساده تمیز و عالی دارید

    • یونس ابراهیمی پاسخ دادن

      سلام دوست عزیز…کلا بدم از شلوغ کاری میاد…ممنون از اینکه نظر دادین

  2. رضا پاسخ دادن

    از مطالب عالی و آموزنده شما تشکر می کنم فقط می خواستم بدونم می شه سوال هم پرسید؟(به صورت رفع اشکال)

    • یونس ابراهیمی پاسخ دادن

      سلام…ممنون از اینکه نظر دادین….بله تو سایت ثبت نام کنید و در قسمت پرسش و پاسخ سوال خودتونو مطرح کنید …در خدمتیم

  3. ناصر پاسخ دادن

    تشکر

  4. علی سواری پاسخ دادن

    بعد از سایت خودم عجیب از سایت شما خوشم اومد. کار ارزشمندی دارید انجام میدید.

    • Developer0400 پاسخ دادن

      سپاسگزارم دوست خوبم ، سلامت باشید
      سایت ما رو به دوستانتون معرفی نمایید.
      متشکرم

  5. Mohammad پاسخ دادن

    ممنون آموزش ها واقعا مفید و کاربردی و ساده هستند .

    • یونس ابراهیمی پاسخ دادن

      شما لطف دارین

  6. حسین پاسخ دادن

    خیلی عالی کوتاه و مفید.دمتون گرم و خسته نباشید

    • یونس ابراهیمی پاسخ دادن

      بسیار ممنون

  7. جعفر پاسخ دادن

    چکار کنم خط به خط سیو بشه؟؟؟؟؟؟

    • یونس ابراهیمی پاسخ دادن

      هر طوری بنویسی همونطور سیو میشه، شما بعد از نوشتن هر خط یه enter بزن، بعد از اینکه ذخیره کردین، به فایل txt نگاه کنید می بینید خط به خط سیو شده

  8. جعفر پاسخ دادن

    چه جالب با تکس باکس خط به خط سیومیکنه ولی رچباکس گذاشتم خط به خط سیو نمیشه راه حلی داره؟؟به جای تکس باکس رچباکس گزاشتم چه باید کرد؟

    • یونس ابراهیمی پاسخ دادن
      private void button1_Click(object sender, EventArgs e)
      {
          saveFileDialog1.Filter = "Text File|.txt";
          saveFileDialog1.FileName = String.Empty;
          saveFileDialog1.DefaultExt = ".txt";
          DialogResult result = saveFileDialog1.ShowDialog();
        
          if (result == DialogResult.OK)
          {
              File.WriteAllLines(saveFileDialog1.FileName, richTextBox1.Lines);
          }
      }
  9. جعفر پاسخ دادن

    بسیار سپاس و تشکر شما کارتون عالی هست
    من ابتدای سی شارپ را یاد گرفتم و ارتباط کنسول و محیط ویندوز را درست درک نکردم برای همین بجای این که بتونم از اموخته های خودم استفاده کنم بیشتر دنبال کد می گردم خیلی ممنون می شم یک اموزشی بزارید یا لینکش را بگزارید تا از محیط کنسول وقتی وارد ویندوز فرم می شیم مثل شما بفهمیم چکار داریم می کنیم بسیار ممنون می شم راهنمایی کنید. بازم تشکر

    • یونس ابراهیمی پاسخ دادن

      سلام، خواهش می کنم، لطف دارین
      شما اینطور فرض کنید که قبلا کلا محیط ویندوزی وجود نداشته و تمام برنامه ها تو محیط کنسول نوشته می شدن، یعنی برای رسم یک مربع یا دایره ساده، کدهای زیادی می نوشتن، تا اینکه برای رفع این مشکل محیط ویندوزی به وجود اومد تا برنامه نویسان از این همه کدنویسی راحت بشن. الان هم برای اینکه تازه کارها بیشتر با کدنویسی و مفاهیم آشنا بشن از محیط کنسول استفاده میشه. در ضمن لینک زیر رو ببیند :
      http://www.w3-farsi.com/%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c-%d9%88%db%8c%da%98%d9%88%d8%a7%d9%84/