کنترل OpenFileDialog

کنترل System.Windows.Forms.OpenFileDialog به شما اجازه می دهید که یک فایل را انتخاب کرده و بخوانید مثلا یک فایل متنی را باز کرده و محتویات آن را بخوانید. این دیالوگ به شما امکان پیمایش فایل ها موجود بر روی سیستم را می دهد. شما می توانید نام یک فایل را در مسیر جاری یا اینکه مسیر کامل آن را در جعبه متنی که در جلوی متن File Name و پایین پنجره قرار دارد بنویسید.
dialogs-05
در جدول زیر لیستی از خاصیت های مهم این کنترل توضیح داده شده است.

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

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

 

فیلتر کردن فایل ها

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

Description1|FilterPattern1|Description2|FilterPattern2|...DescriptionN|FilterPatternN

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

Text Files|*.txt

شرح نوع فایل Text Files و الگوی آن *.txt است. کاراکتر * یک کاراکتر جایگزین است که بیانگر هر نامی است. قسمت .txtمشخص کننده یک پسوند خاص است. الگو تعیین می کند که فایل های با پسوند .txt در پنجره نمایش داده شود. همچنین از کاراکتر های جایگزین برای بسیاری از هدف های دیگر نیز استفاده کنید. به عنوان مثال ، الگوی m*.txt تمامی فایل های متنی که با حرف m شروع می شوند را تطبیق میدهد .یعنی فقط فایل های متنی که اسمشان با حرف m شروع می شود را تشخیص می دهد. الگوی *r.txt تمامی فایل های متنی که نام آنها به حرف r ختم می شود را تطبیق می دهد. الگوی *.* تمامی انواع فایل ها را تطبیق می دهد.الگوی *.t* تمامی فایل های که پسوند انها با حرف t شروع می شود را تطبیق می دهد. شما می توانید چندین فیلتر را مشخص کنید. به عنوان مثال الگوی زیر متشکل از چندین فیلتر است.

Text Files|*.txt|Bitmap Files|*.bmp|All Files|*.*

در جلوی جعبه متنی که نام فایل را می نویسید یک کامبو باکس وجود دارد که لیست فیلتر های مختلف در آن قرار دارد.
file-open-dialog-01
همچنین این امکان وجود دارد که برای چندین پسوند یک توضیح نوشته شود. به عنوان مثال، فایل های تصویری دارای پسوند های مختلفی از جمله bmp ، jpeg ، png هستند. شما به راحتی می توانید پسوند های مختلف را با سمی کالن از یکدیگر جدا کنید.

Image Files|*.bmp;*.jpeg;*.png;*.gif

هنگامی که این فیلتر را انتخاب می کنید تمامی فایل هایی که حداقل با یکی از الگوها ی آن مطابقت داشته باشد نشان داده می شود.

 

مثالی از کاربرد OpenFileDialog

در ادامه یک پروژه جدید از نوع Windows Application درست می کنیم که از قابلیت های پایه ای کنترل OpenFileDialog استفاده می کند. کاربر با استفاده از برنامه یک فایل متنی را انتخاب می کند سپس برنامه محتوای آن فایل را در یک جعبه متن چند خطی نشان می دهد. ابتدا به این نکته توجه کنید که فضای نامی System.IO را به برنامه اضافه کنید.

using System.IO;

یک فرم به شکل زیر طراحی کنید. از جعبه متنی استفاده کنید که خاصیت MultiLine آن برابر true باشد. مقادیر خاصیت های Scrollbars و WordWrap را به ترتیب برابر both و false تغییر دهید.یک کنترل OpenFileDialog را ازجعبه ابزار بر روی فرم قرار دهید.
file-open-dialog-02
بر روی دکمه دو بار کلیک کنید تا کنترل کننده رویداد Click ایجاد شود. دوباره یادآوری می شود که فضای نامی System.IO را به لیست فضای نامی کلاس اضافه کنید. از کد زیر در داخل کنترل کننده رویداد استفاده کنید.

   1: private void button1_Click(object sender, EventArgs e)
   2: {
   3:     //فقط فایل های متنی نمایش داده شوند
   4:     openFileDialog1.Filter = "Text Files|*.txt";
   5:     //هیچ فایلی در ابتدا انتخاب نشود
   6:     openFileDialog1.FileName = String.Empty;
   7: 
   8:     //پنجره ای برای انتخاب فایل باز شود
   9:     DialogResult result = openFileDialog1.ShowDialog();
  10: 
  11:     //کلیک شد Open اگر دکمه
  12:     if (result == DialogResult.OK)
  13:     {
  14:         //مسیر فایل انتخاب شده در یک متغیر ذخیره می شود 
  15:         Stream fs = openFileDialog1.OpenFile();
  16:         // فایل مسیر فایل خوانده می شود StreamReader با استفاده از 
  17:         StreamReader reader = new StreamReader(fs);
  18:         //محتویات فایل خوانده می شود
  19:         textBox1.Text = reader.ReadToEnd();
  20:         //Close the reader and the stream
  21:         reader.Close();
  22:     }
  23: }

در خط 4 با استفاده از خاصیت Filterیک فیلتر را اضافه می کنیم. با استفاده از الگوی آن مشخص می کنیم که در پنجره فقط لیست فایل های متنی نمایان شود. در خط 6 به خاصیت FileName مقدار empty را نسبت می دهیم تا در ابتدا هیچ فایلی انتخاب نشود. سپس با استفاده از متد ShowDialog() در خط 9 پنجره را نمایش می دهیم.این متد خروجی از نوع DialogResult دارد. هنگامی که کاربر یک فایل مجاز را انتخاب و بر روی دکمه Open کلیک می کنید خروجی متد برابر DialogResult.OK می شود(خط 12). با استفاده از دستور شرط خروجی متد را بررسی می کنیم. خروجی متد OpenFile() از کنترل OpenFileDialog را در یک شی از نوع Stream ذخیره می کنیم. شی Stream به فایل انتخاب شده ارجاع دارد ، از این شی در ساخت شی ای از کلاس StreamReader که کار خواندن از فایل را به عهده دارد استفاده می کنیم. با استفاده از متد ReadToEnd() کلاس StreamReader محتوای کامل فایل را خوانده و در خاصیت Text کنترل textBox1 نمایش می دهیم. برنامه را اجرا و بر روی دکمه کلیک کنید. یک فایل متنی را از پنجره نمایش داده شده انتخاب کنید. هنگامی که فایلی که مسیر آن توسط کاربر نوشته شده موجود نباشد، یک پیغام خطا به او نمایش داده می شود.فراموش نکنید که ابتدا خصوصیات CheckFileExists و CheckPathExists را برابر true قرار دهید. اگر فایل انتخاب شده موجود و مجاز باشد محتوای کامل آن در جعبه متنی قرار می گیرد.

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

  1. zinar پاسخ دادن

    سلام دستتون درد نکنه اگه امکان داره کار با بانک اطلاعاتی را نبز توضیح بدین .

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

      سلام …بخش ADO در مورد بانک و ارتباط با اونه

  2. zahra پاسخ دادن

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

  3. nasrin پاسخ دادن

    سلام خسته نباشید
    اگر بخایم هر فایلی باشه و توی تکست یاکس نشونش نده مثلا اگر پی دی افه با آکروبات باز بشه اگه عکسه با ویندوز فوتو ویور نشون بده و ….باید چیکار کنیم ؟
    ممنون

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

      سلام ، مرسی ، می تونید از کد زیر استفاده کنید :

      OpenFileDialog ofd = new OpenFileDialog();
      if (ofd.ShowDialog() == DialogResult.OK)
      {
          System.Diagnostics.Process.Start(ofd.FileName);
      }
      • nasrin پاسخ دادن

        سلام.ممنون از راهنماییتون.من یه کم گیج شدم…من یه توضیح میدم.من یه opendialog گذاشتم با یه دکمه (مثلا اپن).میخام این دکمه رو که زدم و فایلم که از هر نوعی هست رو انتخاب کردم .بیاد این فایل رو در یه مسیر دیگه روی هارد (که این مسیر ثابته برای همه فایل ها وفقط اسم فایله که عوض میشه) کپی کنه یا ذخیره کنه .بعد هر چندتا فایل که خاستم باز کنم و در همین مسیر ذخیره کنم که نام این فایل ها در یک کمبو باکس قابل رویت باشه .حالا روی هر نام فایلی که در کمبو انتخاب کردم و دکمه مثلا view را زدم با این دستور System.Diagnostics.Process.Start(ofd.FileName); فایل رو برام باز کنه .
        شرمنده
        ممنون میشم اگه کمک کنید

        • یونس ابراهیمی

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